• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

polserver / polserver / 35507859038
82%

Build:
DEFAULT BRANCH: master
Ran 20 Sep 2026 11:46AM UTC
Jobs 1
Files 855
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

20 Sep 2026 11:26AM UTC coverage: 81.756% (+0.02%) from 81.741%
35507859038

push

github

web-flow
Read a world faster, and report where the time went (#965)

* Read a world without rebuilding a property tree for every element

ConfigElem kept its properties in a std::multimap. Building one element allocated
a tree node and up to two heap strings per property line and freed them again for
the next, millions of times over, while readProperties() probes ~90 fixed names
against the dozen an element carries - so most probes paid a full tree descent in
order to miss. It is a flat store now: a run of hashes scanned in order, the name
compare only confirming a hit. clear() forgets the live count and removal
tombstones the slot, so the vectors and their string buffers are reused rather
than reallocated. PropKey carries a name with its hash and converts implicitly
from what call sites already pass, so literal names are hashed at compile time and
none of the ~900 call sites changed.

remove_first_prop still answers in name order, which its callers depend on: menu
entries are built in it and read_movecost() interpolates over it. It sorts once
and walks a cursor, so draining a large element stays N log N.

Smaller wins on the same path:

 - the line reader uses memchr over its own buffer instead of a locking fgets plus
   a copy, and reads binary rather than letting the CRT translate CRLF
 - a line is validated as utf8 only once a high bit shows up, which for world data
   is almost never
 - items.txt and storage.txt share one stack of the containers the loader is
   inside, pushed for every container rather than only top-level ones; storage.txt
   had none, so all 2.4 million of its elements paid an object hash descent
 - equiptest.ecl and unequiptest.ecl are located once, not per item per package
 - ObjectHash::Insert makes one tree descent rather than two
 - the zone integrity scans in add_item_to_world and SetCharacterWorldPosition are
   paranoid rather than plain asserts: INC_PASSERT is on in release builds and they
   scan a 64x64 zone linearly, so fill... (continued)

389 of 439 new or added lines in 17 files covered. (88.61%)

11 existing lines in 6 files now uncovered.

60029 of 73425 relevant lines covered (81.76%)

1606001.74 hits per line

Uncovered Changes

Lines Coverage ∆ File
19
36.67
pol-core/pol/loadstats.cpp
14
57.38
-0.54% pol-core/pol/proplist.cpp
4
88.0
0.56% pol-core/pol/item/item.cpp
3
72.73
pol-core/pol/loadstats.h
3
70.3
2.13% pol-core/pol/uimport.cpp
2
94.96
0.11% pol-core/clib/cfgfile.cpp
2
43.8
5.48% pol-core/pol/loaddata.cpp
1
97.45
-0.03% pol-core/clib/strutil.cpp
1
66.67
-33.33% pol-core/pol/proplist.h
1
88.46
0.19% pol-core/pol/storage.cpp

Coverage Regressions

Lines Coverage ∆ File
4
87.78
-0.9% pol-core/pol/module/npcmod.cpp
2
63.41
0.0% pol-core/pol/mobile/ufacing.cpp
2
70.3
2.13% pol-core/pol/uimport.cpp
1
94.96
0.11% pol-core/clib/cfgfile.cpp
1
43.8
5.48% pol-core/pol/loaddata.cpp
1
57.38
-0.54% pol-core/pol/proplist.cpp
Jobs
ID Job ID Ran Files Coverage
1 35507859038.1 20 Sep 2026 11:46AM UTC 855
81.76
GitHub Action Run
Source Files on build 35507859038
  • Tree
  • List 855
  • Changed 25
  • Source Changed 0
  • Coverage Changed 25
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 759ab1d8 on github
  • Prev Build on master (#35504820546)
  • Next Build on master (#35520847132)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc