forked from MTSR/mapserver
optional multithreading
This commit is contained in:
parent
1fb671f71a
commit
3383c492c4
@ -18,6 +18,8 @@ type Config struct {
|
||||
RenderState *RenderStateType `json:"renderstate"`
|
||||
Layers []layer.Layer `json:"layers"`
|
||||
InitialRenderingFetchLimit int `json:"initialrenderingfetchlimit"`
|
||||
InitialRenderingJobs int `json:"initialrenderingjobs"`
|
||||
InitialRenderingQueue int `json:"initialrenderingqueue"`
|
||||
UpdateRenderingFetchLimit int `json:"updaterenderingfetchlimit"`
|
||||
}
|
||||
|
||||
@ -99,6 +101,8 @@ func ParseConfig(filename string) (*Config, error) {
|
||||
RenderState: &rstate,
|
||||
Layers: layers,
|
||||
InitialRenderingFetchLimit: 1000,
|
||||
InitialRenderingJobs: 1,
|
||||
InitialRenderingQueue: 0,
|
||||
UpdateRenderingFetchLimit: 1000,
|
||||
}
|
||||
|
||||
|
@ -1,18 +1,18 @@
|
||||
package initialrenderer
|
||||
|
||||
import (
|
||||
"github.com/sirupsen/logrus"
|
||||
"mapserver/app"
|
||||
"mapserver/coords"
|
||||
"strconv"
|
||||
"time"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func getTileKey(tc *coords.TileCoords) string {
|
||||
return strconv.Itoa(tc.X) + "/" + strconv.Itoa(tc.Y) + "/" + strconv.Itoa(tc.Zoom)
|
||||
}
|
||||
|
||||
func worker(ctx *app.App, coords <-chan *coords.TileCoords){
|
||||
func worker(ctx *app.App, coords <-chan *coords.TileCoords) {
|
||||
for tc := range coords {
|
||||
ctx.Objectdb.RemoveTile(tc)
|
||||
_, err := ctx.Tilerenderer.Render(tc, 2)
|
||||
@ -38,9 +38,11 @@ func Job(ctx *app.App) {
|
||||
rstate := ctx.Config.RenderState
|
||||
lastcoords := coords.NewMapBlockCoords(rstate.LastX, rstate.LastY, rstate.LastZ)
|
||||
|
||||
jobs := make(chan *coords.TileCoords, 0)
|
||||
jobs := make(chan *coords.TileCoords, ctx.Config.InitialRenderingQueue)
|
||||
|
||||
go worker(ctx, jobs)
|
||||
for i := 0; i < ctx.Config.InitialRenderingJobs; i++ {
|
||||
go worker(ctx, jobs)
|
||||
}
|
||||
|
||||
for true {
|
||||
start := time.Now()
|
||||
|
@ -2,24 +2,24 @@ package mapobject
|
||||
|
||||
import (
|
||||
"mapserver/app"
|
||||
"mapserver/mapblockparser"
|
||||
"mapserver/mapblockparser"
|
||||
)
|
||||
|
||||
type Listener struct {
|
||||
ctx *app.App
|
||||
ctx *app.App
|
||||
}
|
||||
|
||||
func (this *Listener) OnParsedMapBlock(block *mapblockparser.MapBlock) {
|
||||
err := this.ctx.Objectdb.RemoveMapData(block.Pos)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err := this.ctx.Objectdb.RemoveMapData(block.Pos)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for id, name := range block.BlockMapping {
|
||||
if name == "mapserver:poi" {
|
||||
onPoiBlock(id, block, this.ctx.Objectdb)
|
||||
}
|
||||
}
|
||||
for id, name := range block.BlockMapping {
|
||||
if name == "mapserver:poi" {
|
||||
onPoiBlock(id, block, this.ctx.Objectdb)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Setup(ctx *app.App) {
|
||||
|
@ -37,9 +37,9 @@ func (db *Sqlite3Accessor) AddMapData(data MapObject) error {
|
||||
}
|
||||
|
||||
res, err := db.db.Exec(addMapDataQuery,
|
||||
data.X, data.Y, data.Z,
|
||||
data.MBPos.X, data.MBPos.Y, data.MBPos.Z,
|
||||
data.Type, data.Mtime)
|
||||
data.X, data.Y, data.Z,
|
||||
data.MBPos.X, data.MBPos.Y, data.MBPos.Z,
|
||||
data.Type, data.Mtime)
|
||||
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
@ -57,10 +57,10 @@ func (db *Sqlite3Accessor) AddMapData(data MapObject) error {
|
||||
//TODO: batch insert
|
||||
_, err := db.db.Exec(addMapDataAttributeQuery, id, k, v)
|
||||
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
|
@ -64,7 +64,6 @@ func TestMigrate(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
func TestMapObjects(t *testing.T) {
|
||||
tmpfile, err := ioutil.TempFile("", "TestMapObjects.*.sqlite")
|
||||
if err != nil {
|
||||
@ -85,15 +84,15 @@ func TestMapObjects(t *testing.T) {
|
||||
attrs := make(map[string]string)
|
||||
attrs["X"] = "y"
|
||||
|
||||
pos := coords.NewMapBlockCoords(0,0,0)
|
||||
pos := coords.NewMapBlockCoords(0, 0, 0)
|
||||
|
||||
o := MapObject{
|
||||
MBPos: &pos,
|
||||
X: 1,
|
||||
Y: 2,
|
||||
Z: 3,
|
||||
Type: "xy",
|
||||
Mtime: 1234,
|
||||
MBPos: &pos,
|
||||
X: 1,
|
||||
Y: 2,
|
||||
Z: 3,
|
||||
Type: "xy",
|
||||
Mtime: 1234,
|
||||
Attributes: attrs,
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,6 @@ func (db *Sqlite3Accessor) GetTile(pos *coords.TileCoords) (*Tile, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
||||
const setTileQuery = `
|
||||
insert or replace into tiles(x,y,zoom,layerid,data,mtime)
|
||||
values(?, ?, ?, ?, ?, ?)
|
||||
@ -69,7 +68,7 @@ func (db *Sqlite3Accessor) RemoveTile(pos *coords.TileCoords) error {
|
||||
}
|
||||
|
||||
func NewSqliteAccessor(filename string) (*Sqlite3Accessor, error) {
|
||||
db, err := sql.Open("sqlite3", filename + "?_timeout=500")
|
||||
db, err := sql.Open("sqlite3", filename+"?_timeout=500")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user