Developer
Greg Daniel
egdaniel@google.com
Performance
YoY:+164%Key patterns and highlights from this developer's activity.
Breakdown of growth, maintenance, and fixes effort over time.
Bugs introduced vs. fixed over time.
Reclassifies engineering effort based on bug attribution. Commits that introduced bugs are retrospectively counted as poor investments.
Investment Quality reclassifies engineering effort based on bug attribution data. Commits identified as buggy origins (those that introduced bugs later fixed by someone) have their grow and maintenance time moved into the Wasted Time category. Their waste (fix commits) remains counted as productive. All other commits retain their standard classification: grow is productive, maintenance is maintenance, and waste (fixes) is productive.
The standard model classifies commits as Growth, Maintenance, or Fixes. Investment Quality adds a quality lens: a commit that introduced a bug is retrospectively counted as a poor investment — the engineering time spent on it was wasted because it ultimately required additional fix work. Fix commits (Fixes in the standard model) are reframed as productive, because fixing bugs is valuable work.
Currently computed client-side from commit and bug attribution data. Ideal server-side endpoint:
POST /v1/organizations/{orgId}/investment-quality
Content-Type: application/json
Request:
{
"startTime": "2025-01-01T00:00:00Z",
"endTime": "2025-12-31T23:59:59Z",
"bucketSize": "BUCKET_SIZE_MONTH",
"groupBy": ["repository_id" | "deliverer_email"]
}
Response:
{
"productivePct": 74,
"maintenancePct": 18,
"wastedPct": 8,
"buckets": [
{
"bucketStart": "2025-01-01T00:00:00Z",
"productive": 4.2,
"maintenance": 1.8,
"wasted": 0.6
}
]
}Latest analyzed commits from this developer.
| Hash | Message | Date | Files | Effort |
|---|---|---|---|---|
| 812c2e2 | This commit performs a **revert** of a previous re-land, effectively **restoring** the design where mipmap data is stored directly within the **`SkBitmap`** class. This **refactoring** reintroduces the `fMips` member to `SkBitmap` and updates its constructors and methods to manage mipmaps internally. Consequently, the `SkImage_Raster` class no longer directly stores mipmaps, and the Ganesh GPU backend is significantly refactored to remove the `GrMippedBitmap` class, instead utilizing `SkBitmap` directly for mipmap-aware operations like proxy creation and fragment processing. The **CPU rendering backend** (`SkBitmapDevice`, `SkDraw`) is also updated to rely on `SkBitmap`'s internal mipmap storage, simplifying `drawBitmap` calls. This change centralizes mipmap ownership within `SkBitmap`, impacting both **CPU and GPU rendering paths** that handle mipmapped images. | Mar 10 | 46 | maint |
| 0cab3e4 | This commit implements a **bug fix** to ensure the correct **glyph mask format** is consistently used throughout the text rendering pipeline, preventing issues with atlas selection and glyph drawing. It involves a significant **refactoring** of the **Ganesh and Graphite GPU backends' text subsystems**, specifically updating `GlyphEntryKey` and related data structures to explicitly include the mask format. Functions such as `makeGlyphFromID`, `getGlyph`, `addGlyphToAtlas`, and `initBackendData` were modified to accept and propagate this format, ensuring proper glyph caching and atlas management. This change impacts core **text rendering** by improving the accuracy of glyph placement and preventing potential out-of-bounds atlas access, and is validated by a new `AtlasOobTest`. | Mar 10 | 16 | waste |
| 9a58840 | This commit **optimizes Vulkan descriptor pool allocation** within the **Graphite rendering backend** by implementing a **dynamic sizing strategy**. Instead of pre-allocating large descriptor pools, the system now starts with smaller pools and grows them incrementally as more descriptor sets are required. This **refactoring** of the `VulkanDescriptorPool` and `VulkanResourceProvider` aims to **reduce memory consumption** and processing time associated with descriptor set management. Specifically, the `VulkanDescriptorPool::Make` function was updated to accept a `numSets` parameter, enabling `VulkanResourceProvider` to manage pool sizes more efficiently during the `findOrCreateDescriptorSet` process. This change improves **resource management** for the **Graphite Vulkan backend**. | Mar 5 | 4 | maint |
| 54e54dd | This commit **removes a specific test case** from `VkBackendSurfaceMutableStateTest` within the **Vulkan backend's testing suite**. The removed test case attempted to move a non-external `VkImage` to an external queue, an operation now clarified by the **Vulkan specification** as disallowed. This **test refinement** ensures the test suite aligns with the latest Vulkan spec, preventing tests of invalid behavior. It also addresses the practical limitation of not having a second queue available in the test environment to properly execute such a transfer. | Mar 4 | 2 | – |
| 128390f | This commit **fixes a bug** in the **Ganesh Vulkan backend** by **preventing the creation of protected vertex and index buffers**. The `GrVkBuffer::Make` function in `src/gpu/ganesh/vk/GrVkBuffer.cpp` is modified to ensure these buffer types are not allocated as protected resources. This **corrects an issue** where protected memory access, which is disallowed in the vertex stage by Vulkan, could be incorrectly requested for vertex and index data. The change **improves the robustness and correctness** of Vulkan resource management within Ganesh, preventing potential rendering errors or crashes. | Jan 20 | 1 | waste |
| 6f7ad85 | This commit **fixes the initialization** of `VulkanCaps::DepthStencilFormatInfo` within the **Graphite Vulkan backend**, addressing an issue where depth and stencil format capabilities might be incorrectly reported. It involves a **refactoring** of the `VulkanCaps` class, introducing dedicated `ForInit` methods like `getDepthStencilFormatInfoForInit` to clearly separate format information retrieval for initialization from constant access. This **maintenance** change simplifies depth/stencil support checks and ensures that **Vulkan device capabilities** are accurately determined, preventing potential rendering issues related to misidentified hardware support. | Jan 20 | 2 | maint |
| 95ad05a | This commit introduces a **new utility** in `tools/DeserialProcsUtils` to centralize the setting of default deserialization procedures for **Skia Picture (SKP) decoding**, specifically for images and typefaces. This **refactoring** ensures that various **Skia tools** like `nanobench`, `dm`, `skp_parser`, `skpbench`, and `viewer` consistently and correctly decode SKP files. By providing a shared mechanism via `get_default_skp_deserial_procs`, it **fixes issues where SKPs were not fully rendered** due to missing deserialization logic, significantly improving the reliability of SKP processing across the project. | Jan 14 | 13 | maint |
| 2c4be9f | This commit **updates the `.gitignore` rules** for the **Android viewer application's assets** located at `platform_tools/android/apps/viewer/src/main/assets`. It refines the ignore strategy to now **ignore all files by default** within this directory, then explicitly re-include the `.gitignore` file itself. This **maintenance chore** addresses an issue where previous rules were not effectively catching all unwanted asset files. The change ensures that all unintended asset files are properly excluded from version control, improving repository cleanliness and streamlining asset management for the **Android viewer**. | Jan 14 | 1 | maint |
| b5f637d | This commit **updates the CI/CD infrastructure** to **refine Graphite testing coverage and stability**. It **removes the problematic Ubuntu Graphite ASAN test configuration** due to persistent timeouts, which was causing pipeline flakiness. Concurrently, a **new Android Graphite HWASAN test configuration** is introduced for `Test-Android-Clang-Pixel4a-GPU-Adreno618-arm64-Debug-All-Android_Graphite_Native_HWASAN`, expanding memory safety validation on a specific Android device. This **maintenance and growth** change, reflected in `infra/bots/jobs.json` and `infra/bots/tasks.json`, improves the reliability of the automated testing pipeline and extends crucial test coverage. | Nov 5 | 2 | grow |
| 45af4e8 | This commit performs **maintenance refactoring** within the **Continuous Quality (CQ) system** to **shift Graphite-related test workloads** off macOS devices. Specifically, it **removes a Mac-based ASAN Graphite Native Metal test task** and introduces a new **Ubuntu-based ASAN Graphite Native Vulkan test task** in `infra/bots/tasks.json`. Concurrently, the `infra/bots/jobs.json` configuration is adjusted to reflect these changes, optimizing resource allocation and expanding Graphite testing coverage on different platforms and graphics APIs. This ensures more efficient and diverse testing for Graphite. | Nov 4 | 2 | maint |
| ce928c4 | This commit **fixes a bug** by modifying the **Skia infrastructure bots** to **skip the `vkmsaa4` configuration** when running **DM (Display Manager)** tasks for **Imagination (IMG) GPUs**. Specifically, the `dmFlags` function in `infra/bots/gen_tasks_logic/dm_flags.go` is updated to conditionally exclude this setting. This **configuration adjustment** prevents potential issues or incorrect behavior on Ganesh Imagination setups, ensuring more stable and correct testing on these specific hardware targets. | Oct 29 | 2 | waste |
| 83789d3 | This commit performs a **cleanup and refactoring** within the **Vulkan backend** following a previous refactor of `VulkanYcbcrConversionInfo`. It updates `src/gpu/ganesh/vk/AHardwareBufferVk.cpp` to access `externalFormat` via a getter method in `make_vk_backend_texture`. Concurrently, it removes redundant `fFormatFeatures` initialization and associated conditional logic from the `VulkanYcbcrConversionInfo` constructor and `toVkSamplerYcbcrConversionCreateInfo` function in `src/gpu/vk/VulkanUtilsPriv.cpp`. This **maintenance** work streamlines the handling of **Vulkan YCbCr conversion information**, improving code clarity and efficiency. | Oct 29 | 3 | maint |
| bc0b20d | This commit **refactors** the **Vulkan** backend by adding the `SK_API` macro to the `VulkanYcbcrConversionInfo` struct definition within `include/gpu/vk/VulkanTypes.h`. This change ensures that the `VulkanYcbcrConversionInfo` struct is properly exported as part of Skia's public API. It is a **maintenance** update crucial for **API visibility and stability**, allowing external consumers of the Skia library to correctly access and utilize this Vulkan-specific structure. The modification makes the struct available for downstream integration, particularly for applications interacting with Vulkan YCbCr conversion functionalities. | Oct 27 | 1 | maint |
| 0d44e07 | This commit provides a **maintenance fix** for the **Graphite rendering backend's Android precompile test suite**. It **updates the expected pipeline labels** within `tests/graphite/precompile/AndroidPrecompileTest.cpp` to align with recent changes in how hardware image identifiers are generated or used. This ensures the **Android precompile tests** correctly validate the system's behavior and do not produce false failures due to outdated expectations. The change improves the **reliability of the Graphite testing infrastructure** by keeping test expectations current with underlying system behavior. | Oct 22 | 1 | maint |
| 3754c58 | This commit **fixes a bug** in the **Graphite and Ganesh Vulkan backends** by addressing inconsistent handling of **YCbCr feature flags**. Previously, these flags were dropped during conversions between `VulkanYcbcrConversionInfo` and `ImmutableSamplerInfo`, causing a **mismatch** in YCbCr object properties between `ImageViews` and `Samplers` when `chromeFilter` or main sampler filters were downgraded. This **refactoring** ensures that all YCbCr conversion decisions, including feature flags, are **tracked consistently** from the initial creation of `VulkanYcbcrConversionInfo` objects through all subsequent conversions. This **maintenance** work prevents potential rendering artifacts or incorrect filtering within the **Vulkan rendering pipeline** by guaranteeing proper YCbCr configuration across related objects. | Oct 22 | 18 | maint |
| e1555f6 | This commit **fixes a bug** (b/387306744) in the **Ganesh GPU backend** that prevented proper handling of drawing an image into a surface backed by the same texture. It introduces a **refactoring** to plumb the `targetSurface` proxy into `ProxyChooser::chooseProxy`, enabling the system to detect self-drawing scenarios and perform a necessary copy-on-write. This change modifies the `skgpu::ganesh::AsView` function signature and updates numerous image drawing functions and their call sites to correctly pass the `targetProxy` or `nullptr`. The update ensures robust image rendering by preventing illegal operations and is verified by a new test case. | Oct 8 | 21 | waste |
| 05f7251 | This commit **fixes a bug** in the **Ganesh GL backend** by refining the application of a **PowerVR workaround**. It ensures that when **ANGLE** is utilized as the GLES driver, the system correctly checks **ANGLE's internal driver version** rather than the irrelevant top-level driver version. This adjustment, implemented in `GrGLCaps.cpp` within the `applyDriverCorrectnessWorkarounds` function, prevents incorrect or missed application of the workaround. The change improves **rendering stability and correctness** for users running Ganesh with ANGLE on PowerVR hardware. | Apr 1 | 1 | waste |
| af5aa0d | This commit performs a significant **refactoring** within the **Ganesh GPU backend** by plumbing `SurfaceDrawContext` directly through numerous `asFragmentProcessor` calls and related functions. This change updates how **fragment processors**, **image processing**, and various **drawing operations** (e.g., `SkPaintToGrPaint` functions, `Device` draw methods) access rendering context information, replacing or deriving `GrRecordingContext` with `SurfaceDrawContext`. The work is **preparatory maintenance**, simplifying argument passing and centralizing access to surface-specific properties. Specifically, it modifies `GrFPArgs` constructors, `GrFragmentProcessors::Make` functions, and `SkPaintToGrPaint` family of functions to accept `SurfaceDrawContext`. This foundational change is crucial for an upcoming feature that will require checking the target surface to determine copy-on-write behavior. | Mar 31 | 31 | maint |
| b85e599 | This commit performs **code cleanup** by **removing unused `makeSpecial` factory methods** from the **Ganesh Device** implementation. Consequently, the **test suite** is updated to remove the corresponding `MakeSpecial` helper methods and their test cases from `tests/DeviceTest.cpp`. This **maintenance** task streamlines the `Ganesh Device` interface, eliminating dead code and ensuring the test coverage accurately reflects the current API. | Mar 27 | 11 | maint |
| d54c36d | This commit **reverts** a previous, incorrect **bug fix** related to `copyOnWrite` logic within **Ganesh** image handling, specifically for **dual-proxies**. It undoes changes to the `surfaceMustCopyOnWrite` method in `SkImage_Ganesh.cpp` and `SkImage_Ganesh.h`, which had mistakenly compared an `SkSurface`'s cached image proxy to the surface's proxy. This **maintenance** revert restores the prior behavior, acknowledging that the previous fix did not correctly address the intended problem of comparing the input image to a draw command with the canvas/surface. | Mar 21 | 3 | waste |
This commit performs a **revert** of a previous re-land, effectively **restoring** the design where mipmap data is stored directly within the **`SkBitmap`** class. This **refactoring** reintroduces the `fMips` member to `SkBitmap` and updates its constructors and methods to manage mipmaps internally. Consequently, the `SkImage_Raster` class no longer directly stores mipmaps, and the Ganesh GPU backend is significantly refactored to remove the `GrMippedBitmap` class, instead utilizing `SkBitmap` directly for mipmap-aware operations like proxy creation and fragment processing. The **CPU rendering backend** (`SkBitmapDevice`, `SkDraw`) is also updated to rely on `SkBitmap`'s internal mipmap storage, simplifying `drawBitmap` calls. This change centralizes mipmap ownership within `SkBitmap`, impacting both **CPU and GPU rendering paths** that handle mipmapped images.
This commit implements a **bug fix** to ensure the correct **glyph mask format** is consistently used throughout the text rendering pipeline, preventing issues with atlas selection and glyph drawing. It involves a significant **refactoring** of the **Ganesh and Graphite GPU backends' text subsystems**, specifically updating `GlyphEntryKey` and related data structures to explicitly include the mask format. Functions such as `makeGlyphFromID`, `getGlyph`, `addGlyphToAtlas`, and `initBackendData` were modified to accept and propagate this format, ensuring proper glyph caching and atlas management. This change impacts core **text rendering** by improving the accuracy of glyph placement and preventing potential out-of-bounds atlas access, and is validated by a new `AtlasOobTest`.
This commit **optimizes Vulkan descriptor pool allocation** within the **Graphite rendering backend** by implementing a **dynamic sizing strategy**. Instead of pre-allocating large descriptor pools, the system now starts with smaller pools and grows them incrementally as more descriptor sets are required. This **refactoring** of the `VulkanDescriptorPool` and `VulkanResourceProvider` aims to **reduce memory consumption** and processing time associated with descriptor set management. Specifically, the `VulkanDescriptorPool::Make` function was updated to accept a `numSets` parameter, enabling `VulkanResourceProvider` to manage pool sizes more efficiently during the `findOrCreateDescriptorSet` process. This change improves **resource management** for the **Graphite Vulkan backend**.
This commit **removes a specific test case** from `VkBackendSurfaceMutableStateTest` within the **Vulkan backend's testing suite**. The removed test case attempted to move a non-external `VkImage` to an external queue, an operation now clarified by the **Vulkan specification** as disallowed. This **test refinement** ensures the test suite aligns with the latest Vulkan spec, preventing tests of invalid behavior. It also addresses the practical limitation of not having a second queue available in the test environment to properly execute such a transfer.
This commit **fixes a bug** in the **Ganesh Vulkan backend** by **preventing the creation of protected vertex and index buffers**. The `GrVkBuffer::Make` function in `src/gpu/ganesh/vk/GrVkBuffer.cpp` is modified to ensure these buffer types are not allocated as protected resources. This **corrects an issue** where protected memory access, which is disallowed in the vertex stage by Vulkan, could be incorrectly requested for vertex and index data. The change **improves the robustness and correctness** of Vulkan resource management within Ganesh, preventing potential rendering errors or crashes.
This commit **fixes the initialization** of `VulkanCaps::DepthStencilFormatInfo` within the **Graphite Vulkan backend**, addressing an issue where depth and stencil format capabilities might be incorrectly reported. It involves a **refactoring** of the `VulkanCaps` class, introducing dedicated `ForInit` methods like `getDepthStencilFormatInfoForInit` to clearly separate format information retrieval for initialization from constant access. This **maintenance** change simplifies depth/stencil support checks and ensures that **Vulkan device capabilities** are accurately determined, preventing potential rendering issues related to misidentified hardware support.
This commit introduces a **new utility** in `tools/DeserialProcsUtils` to centralize the setting of default deserialization procedures for **Skia Picture (SKP) decoding**, specifically for images and typefaces. This **refactoring** ensures that various **Skia tools** like `nanobench`, `dm`, `skp_parser`, `skpbench`, and `viewer` consistently and correctly decode SKP files. By providing a shared mechanism via `get_default_skp_deserial_procs`, it **fixes issues where SKPs were not fully rendered** due to missing deserialization logic, significantly improving the reliability of SKP processing across the project.
This commit **updates the `.gitignore` rules** for the **Android viewer application's assets** located at `platform_tools/android/apps/viewer/src/main/assets`. It refines the ignore strategy to now **ignore all files by default** within this directory, then explicitly re-include the `.gitignore` file itself. This **maintenance chore** addresses an issue where previous rules were not effectively catching all unwanted asset files. The change ensures that all unintended asset files are properly excluded from version control, improving repository cleanliness and streamlining asset management for the **Android viewer**.
This commit **updates the CI/CD infrastructure** to **refine Graphite testing coverage and stability**. It **removes the problematic Ubuntu Graphite ASAN test configuration** due to persistent timeouts, which was causing pipeline flakiness. Concurrently, a **new Android Graphite HWASAN test configuration** is introduced for `Test-Android-Clang-Pixel4a-GPU-Adreno618-arm64-Debug-All-Android_Graphite_Native_HWASAN`, expanding memory safety validation on a specific Android device. This **maintenance and growth** change, reflected in `infra/bots/jobs.json` and `infra/bots/tasks.json`, improves the reliability of the automated testing pipeline and extends crucial test coverage.
This commit performs **maintenance refactoring** within the **Continuous Quality (CQ) system** to **shift Graphite-related test workloads** off macOS devices. Specifically, it **removes a Mac-based ASAN Graphite Native Metal test task** and introduces a new **Ubuntu-based ASAN Graphite Native Vulkan test task** in `infra/bots/tasks.json`. Concurrently, the `infra/bots/jobs.json` configuration is adjusted to reflect these changes, optimizing resource allocation and expanding Graphite testing coverage on different platforms and graphics APIs. This ensures more efficient and diverse testing for Graphite.
This commit **fixes a bug** by modifying the **Skia infrastructure bots** to **skip the `vkmsaa4` configuration** when running **DM (Display Manager)** tasks for **Imagination (IMG) GPUs**. Specifically, the `dmFlags` function in `infra/bots/gen_tasks_logic/dm_flags.go` is updated to conditionally exclude this setting. This **configuration adjustment** prevents potential issues or incorrect behavior on Ganesh Imagination setups, ensuring more stable and correct testing on these specific hardware targets.
This commit performs a **cleanup and refactoring** within the **Vulkan backend** following a previous refactor of `VulkanYcbcrConversionInfo`. It updates `src/gpu/ganesh/vk/AHardwareBufferVk.cpp` to access `externalFormat` via a getter method in `make_vk_backend_texture`. Concurrently, it removes redundant `fFormatFeatures` initialization and associated conditional logic from the `VulkanYcbcrConversionInfo` constructor and `toVkSamplerYcbcrConversionCreateInfo` function in `src/gpu/vk/VulkanUtilsPriv.cpp`. This **maintenance** work streamlines the handling of **Vulkan YCbCr conversion information**, improving code clarity and efficiency.
This commit **refactors** the **Vulkan** backend by adding the `SK_API` macro to the `VulkanYcbcrConversionInfo` struct definition within `include/gpu/vk/VulkanTypes.h`. This change ensures that the `VulkanYcbcrConversionInfo` struct is properly exported as part of Skia's public API. It is a **maintenance** update crucial for **API visibility and stability**, allowing external consumers of the Skia library to correctly access and utilize this Vulkan-specific structure. The modification makes the struct available for downstream integration, particularly for applications interacting with Vulkan YCbCr conversion functionalities.
This commit provides a **maintenance fix** for the **Graphite rendering backend's Android precompile test suite**. It **updates the expected pipeline labels** within `tests/graphite/precompile/AndroidPrecompileTest.cpp` to align with recent changes in how hardware image identifiers are generated or used. This ensures the **Android precompile tests** correctly validate the system's behavior and do not produce false failures due to outdated expectations. The change improves the **reliability of the Graphite testing infrastructure** by keeping test expectations current with underlying system behavior.
This commit **fixes a bug** in the **Graphite and Ganesh Vulkan backends** by addressing inconsistent handling of **YCbCr feature flags**. Previously, these flags were dropped during conversions between `VulkanYcbcrConversionInfo` and `ImmutableSamplerInfo`, causing a **mismatch** in YCbCr object properties between `ImageViews` and `Samplers` when `chromeFilter` or main sampler filters were downgraded. This **refactoring** ensures that all YCbCr conversion decisions, including feature flags, are **tracked consistently** from the initial creation of `VulkanYcbcrConversionInfo` objects through all subsequent conversions. This **maintenance** work prevents potential rendering artifacts or incorrect filtering within the **Vulkan rendering pipeline** by guaranteeing proper YCbCr configuration across related objects.
This commit **fixes a bug** (b/387306744) in the **Ganesh GPU backend** that prevented proper handling of drawing an image into a surface backed by the same texture. It introduces a **refactoring** to plumb the `targetSurface` proxy into `ProxyChooser::chooseProxy`, enabling the system to detect self-drawing scenarios and perform a necessary copy-on-write. This change modifies the `skgpu::ganesh::AsView` function signature and updates numerous image drawing functions and their call sites to correctly pass the `targetProxy` or `nullptr`. The update ensures robust image rendering by preventing illegal operations and is verified by a new test case.
This commit **fixes a bug** in the **Ganesh GL backend** by refining the application of a **PowerVR workaround**. It ensures that when **ANGLE** is utilized as the GLES driver, the system correctly checks **ANGLE's internal driver version** rather than the irrelevant top-level driver version. This adjustment, implemented in `GrGLCaps.cpp` within the `applyDriverCorrectnessWorkarounds` function, prevents incorrect or missed application of the workaround. The change improves **rendering stability and correctness** for users running Ganesh with ANGLE on PowerVR hardware.
This commit performs a significant **refactoring** within the **Ganesh GPU backend** by plumbing `SurfaceDrawContext` directly through numerous `asFragmentProcessor` calls and related functions. This change updates how **fragment processors**, **image processing**, and various **drawing operations** (e.g., `SkPaintToGrPaint` functions, `Device` draw methods) access rendering context information, replacing or deriving `GrRecordingContext` with `SurfaceDrawContext`. The work is **preparatory maintenance**, simplifying argument passing and centralizing access to surface-specific properties. Specifically, it modifies `GrFPArgs` constructors, `GrFragmentProcessors::Make` functions, and `SkPaintToGrPaint` family of functions to accept `SurfaceDrawContext`. This foundational change is crucial for an upcoming feature that will require checking the target surface to determine copy-on-write behavior.
This commit performs **code cleanup** by **removing unused `makeSpecial` factory methods** from the **Ganesh Device** implementation. Consequently, the **test suite** is updated to remove the corresponding `MakeSpecial` helper methods and their test cases from `tests/DeviceTest.cpp`. This **maintenance** task streamlines the `Ganesh Device` interface, eliminating dead code and ensuring the test coverage accurately reflects the current API.
This commit **reverts** a previous, incorrect **bug fix** related to `copyOnWrite` logic within **Ganesh** image handling, specifically for **dual-proxies**. It undoes changes to the `surfaceMustCopyOnWrite` method in `SkImage_Ganesh.cpp` and `SkImage_Ganesh.h`, which had mistakenly compared an `SkSurface`'s cached image proxy to the surface's proxy. This **maintenance** revert restores the prior behavior, acknowledging that the previous fix did not correctly address the intended problem of comparing the input image to a draw command with the canvas/surface.
Commit activity distribution by hour and day of week. Shows when this developer is most active.
Developers who frequently work on the same files and symbols. Higher score means stronger code collaboration.