commit | 629edeab12ec199208540c4a00b05a3d55bafd66 | [log] [tgz] |
---|---|---|
author | Filip Filmar <fmil@google.com> | Mon Jul 08 22:21:12 2019 +0000 |
committer | CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> | Mon Jul 08 22:21:12 2019 +0000 |
tree | 44dc5662bbe591ed72a2bdd386f39b1cc3af577e | |
parent | 8b3fb3855bfa9970b2c43641efd1f4fc5819a4b9 [diff] |
[inspect][dart] Implement a big-small slab allocator CF-870 #comment This implements a big-small slab allocator. The motivation is to reduce the overhead that occurs when byte or string properties are allocated. Use case would be for storing largish URLs, e.g. around 100 characters. Benchmark results (below) show an overall performance improvement, most significantly for operations on long byte and string properties. Implementation notes: - The size of the big block must be at least 32 bytes, to ensure that 24 bytes of property name could be stored, per specification. In contrast to property values, property names don't use extents so must fit into a single block. This in turn means that names may not necessarily fit into small blocks and have to use large blocks with slack space. - There was some test brittleness because tests were assuming the VMO and heap allocator structure. That was by and large removed. - VmoWriter had to be rewritten for dependency injection to test all heap allocator implementations thoroughly. This required introducing default factories for Heap implementations, and modifying test code to use them instead of invoking constructors explicitly. - Improved diagnostic output for dumpBlocks and error messages. Many error messages now add a VMO block hexdump on test failure. Benchmarks: ╰─>$ benchstat old.cvt.txt new.cvt.txt name old time/op new time/op delta basic/increment 17.0µs ±42% 11.9µs ±21% -30.27% (p=0.001 n=11+13) basic/setInt 15.2µs ±46% 10.8µs ±16% -28.97% (p=0.000 n=11+13) basic/delNode 29.5µs ±51% 18.5µs ±20% -37.32% (p=0.000 n=12+13) basic/addNode 48.3µs ±57% 31.7µs ±19% -34.31% (p=0.000 n=12+13) basic/setByte 47.9µs ±51% 32.2µs ±20% -32.73% (p=0.000 n=12+12) basic/resetByte 58.2µs ±47% 38.7µs ±15% -33.50% (p=0.000 n=12+13) basic/setByteLong 564µs ±49% 167µs ±14% -70.32% (p=0.000 n=12+13) basic/resetByteLong 757µs ±50% 224µs ±15% -70.37% (p=0.000 n=12+13) basic/setString 38.3µs ±47% 25.7µs ±14% -32.92% (p=0.000 n=12+13) basic/resetString 44.5µs ±51% 27.9µs ±13% -37.45% (p=0.000 n=12+13) basic/setStringLong 602µs ±49% 195µs ±15% -67.69% (p=0.000 n=12+13) basic/resetStringLong 810µs ±50% 250µs ±16% -69.13% (p=0.000 n=12+13) basic/incDouble 18.9µs ±53% 12.1µs ±19% -35.90% (p=0.000 n=12+13) basic/setDouble 16.3µs ±81% 10.8µs ±15% -33.49% (p=0.001 n=11+12) basic/alloc 159µs ±48% 105µs ±14% -34.24% (p=0.000 n=12+13) basic/url 181µs ±48% 90µs ±17% -50.23% (p=0.000 n=12+13) Change-Id: Id1b8a6ea27b94ad1850bd0cf26d1ff4862e95c37
Topaz augments system functionality by implementing interfaces defined by underlying layers. Topaz contains four major categories of software: modules, agents, shells, and runners.
For example, modules include the dashboard, and runners include the Web, Dart, and Flutter runners.
Looking for something that used to be in this repository? The list below provides a code location and sha that can be used to checkout dead code that has been removed. Please note, it is unlikely the code will build or work correctly shas are provided for reference only. Code can be checked out with:
git checkout <sha> -- $FUCHSIA_DIR/<location>