Thomas Smith
90d · built 2026-09-30
Performance
What Thomas Smith shipped in the selected window, measured in ETV, and how it compares with the 90 days before it.
Effective capacity
+2.5engineers
delivers like 3.5 (3.5x pre-AI)
Output (ETV)
18.0ETV
+62.3% vs 11.1 prior
Features share
24.4%
−3.7 pp vs prior window
Fixes share
34.6%
−0.3 pp vs prior window
Work mix
24.4% Features14.7% Maintenance25.2% Tests1.2% Docs34.6% Fixes
59 commits over 90 days, ending 2026-09-30.
Daily performance
Daily ETV, stacked by Features, Maintenance, Tests, Docs and Fixes.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 10 by ETV in the last 90 days.
- 2.0ETV[ganesh] More triangulator guards * more speculative fixes for triangulator dereferencing behavior Bug: chromium:473156318 Bug: chromium:470210175 Bug: chromium:546237339 Change-Id: I4d41121c08161b5eebecd46b28c7b8a641477ca2 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1323017 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Thomas Smith <thomsmit@google.com>github.com-google-skia · c12ebabc · 2026-08-19
- 1.4ETV[SkSL] Support readonly textures as sampled textures or storage images * Previously, adding the readonly qualifier to a texture always upgraded it to a storage texture. However, only textures which require writing need the storage modifier. * This patch allows a `readonly texture2D` to represent either a sampled texture (by omitting the pixel format) or a true read-only storage image (by including the pixel format). * This distinction matters because in SPIR-V, a sampled texture performs a texture read with `OpImageFetch`, but a storage image uses `OpImageRead` Bug: b/262429132 Bug: b/537737666 Change-Id: I407178fd26fe60261522b311e19a87447be0480f Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1342296 Reviewed-by: Michael Ludwig <michaelludwig@google.com> Reviewed-by: Nathan Sanchez <nathanasanchez@google.com> Commit-Queue: Thomas Smith <thomsmit@google.com>github.com-google-skia · 64ddea0f · 2026-09-02
- 0.9ETV[ganesh] Prevent silent updateData failure * Under high memory pressure scenarios, most notably flushCpuData(), updateData() can fail silently, enabling an attacker to potentially draw stale data from a buffer. * Pipes out the result from updateData() in several places, dropping the draw if a failure occurs. Bug: b/553130676 Change-Id: Id281f53d9f6e4d79d0737fa7b54a102e59ab5f00 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1339637 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Thomas Smith <thomsmit@google.com>github.com-google-skia · 13ed848e · 2026-09-02
- 0.7ETV[graphite] Add OracleValidator and SkpValidator * Adds OracleValidator, which uses the SparseStrips oracle to perform end to end validation of the entire sparse strips pipeline. * Adds SkpValidator, which sniffs skps for paths, and then runs and comapres the OracleValidator and SparseStrips pipeline. * Refactors the files so that the SkpValidator, Oracle Validator, and Oracle each have their own file. CoverageTestUtils is now used as a generalize helper across the SparseStrips testing files. Bug: b/466122293 Bug: b/466119734 Bug: b/385170952 Change-Id: I2af3109f4202235cea625f2abfae9485522e76da Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1329756 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Thomas Smith <thomsmit@google.com>github.com-google-skia · ffc2cc46 · 2026-08-25
- 0.7ETV[graphite] SparseStrips approximate conics with cubics * Prior to this change, conics were approximated with quadratics, now they are approximated with cubics using Floater's method, which provides a G1 approximation whose error decreases at n^6. Before this change: 97/97 MB 3 2.15ms 2.19ms 2.19ms 2.25ms 1% ▂▁▄▁▅█▄▆▆▄ grmtl SparseStrips_Flatten_SIMD_Conics After this change: 60/60 MB 5 1.07ms 1.09ms 1.08ms 1.1ms 1% ▁▅▃▅▁▆▄█▃▄ grmtl SparseStrips_Flatten_SIMD_Conics Change-Id: I67cdccb88a497895334355ea39b1c2fe785e4f7b Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1289176 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Thomas Smith <thomsmit@google.com>github.com-google-skia · 6cdc17ff · 2026-07-27
- 0.6ETV[graphite] Support texture fallback generation in StorageContext * Adds, but does not use: 1) Fallback-texture-formatted-writing for gradients and vertices 2) StorageContext texture proxy creation 3) Finalize() wrapper which returns a std::variant depending on whether storagebuffers are supported or not. * Currently, we have no handling for the fallback texture, so we polyfill over the finalize method. Bug: b/537737666 Change-Id: Idf327bb70c5306da7be5d07afadf312788014147 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1350239 Reviewed-by: Michael Ludwig <michaelludwig@google.com> Commit-Queue: Thomas Smith <thomsmit@google.com>github.com-google-skia · 53a186c0 · 2026-09-18
- 0.6ETV[graphite] Add Fallback Texture SkSL Generation * Because the fallback texture is a vec4<f32>, we bump the alignment of the storage data to 16 bytes, to avoid issues caused by crossing texels. Internally, the renderstep StorageUniforms are aligned using the UniformOffsetCalculator, using Std430 rules for simplicity. * As no renderstep currently uses StorageUniforms, this change is cosmetic. Bug: b/537737666 Change-Id: Ibbd155b1e665479c754c636a368f662161775d08 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1349577 Reviewed-by: Michael Ludwig <michaelludwig@google.com> Commit-Queue: Thomas Smith <thomsmit@google.com>github.com-google-skia · cbe79983 · 2026-09-04
- 0.6ETV[graphite] Replace StorageBufferManager with StorageContext * Removes SBM from recorder. * Now, each DrawList now holds a StorageContext, which contains a device level cache. * This cache persists across flushes triggered in drawGeometry, but clears after organic flushing. * Snapping the drawPass triggers storageContext finalization, which aligns and pads out the gradient data in anticipation of future appended data. Bug: b/537737666 Change-Id: I27f8fd70efc4803afc80d41b22ebdb0f5cedfa22 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1298917 Commit-Queue: Thomas Smith <thomsmit@google.com> Reviewed-by: Michael Ludwig <michaelludwig@google.com>github.com-google-skia · 8904946b · 2026-08-12
- 0.6ETVReland "[graphite] Replace StorageBufferManager with StorageContext" This reverts commit 791e4ac110f4d05115c80549779a123e663b75e1. Fixes incorrect downcast behavior in test Original change's description: > Revert "[graphite] Replace StorageBufferManager with StorageContext" > > This reverts commit 8904946b4201e76ee1556e8cd8cdf2e3c0e57342. > > Reason for revert: Unit test failure on the tree and blocking the Dawn roll > > Failure Link: <LINK TO FAILURE> > > Original change's description: > > [graphite] Replace StorageBufferManager with StorageContext > > > > * Removes SBM from recorder. > > > > * Now, each DrawList now holds a StorageContext, which contains a device level cache. > > > > * This cache persists across flushes triggered in drawGeometry, but clears after organic flushing. > > > > * Snapping the drawPass triggers storageContext finalization, which > > aligns and pads out the gradient data in anticipation of future appended > > data. > > > > Bug: b/537737666 > > Change-Id: I27f8fd70efc4803afc80d41b22ebdb0f5cedfa22 > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1298917 > > Commit-Queue: Thomas Smith <thomsmit@google.com> > > Reviewed-by: Michael Ludwig <michaelludwig@google.com> > > Bug: b/537737666 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Change-Id: I233a554f32d1590d421de1bf1a6a027bce0cb06b > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1324516 > Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com> > Commit-Queue: Robert Phillips <robertphillips@google.com> Bug: b/537737666 Change-Id: Id55bf4d986975c4f9c55bc39f90bd038efd19474 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1324576 Commit-Queue: Thomas Smith <thomsmit@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com>github.com-google-skia · 3ac5239a · 2026-08-13
- 0.6ETV[graphite] Adds kRead texture usage and getter functions * We want to use readonly textures as a proxy for storage buffers when storage buffers are unsupported, so we add the kRead texture usage. * Across all backends, a supported texture can always be read or sampled, but not necessarily linearly filtered. This texture usage simply exposes the case where we want readability but don't care about filtering. * Note, this is usage is not to be confused with storage textures, which require writability. Bug: b/537737666 Change-Id: I056f6cb0777167bc97ee7f0f1e465098eee449be Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1326916 Reviewed-by: Michael Ludwig <michaelludwig@google.com> Commit-Queue: Thomas Smith <thomsmit@google.com>github.com-google-skia · c75b9f86 · 2026-08-26