| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CC_PAINT_SHADER_TRANSFER_CACHE_ENTRY_H_ |
| #define CC_PAINT_SHADER_TRANSFER_CACHE_ENTRY_H_ |
| |
| #include "base/containers/span.h" |
| #include "cc/paint/paint_export.h" |
| #include "cc/paint/paint_shader.h" |
| #include "cc/paint/transfer_cache_entry.h" |
| |
| namespace cc { |
| |
| // There is only a service transfer cache entry here. The reason shaders |
| // are cached at all are to reuse internal Skia caches for SkPictureShaders. |
| // However, the major reason not to transfer from the client is that it |
| // avoids the design change to make it possible for transfer cache entries |
| // to depend on transfer cache entries. This adds a number of wrinkles |
| // (during serialization, deserialization, scheduling). The assumption |
| // is that most picture shaders are small (e.g. a few ops to draw a tiled |
| // image) and that the design complication for this edge case isn't worth |
| // it. |
| |
| class CC_PAINT_EXPORT ServiceShaderTransferCacheEntry |
| : public ServiceTransferCacheEntryBase<TransferCacheEntryType::kShader> { |
| public: |
| explicit ServiceShaderTransferCacheEntry(sk_sp<PaintShader> shader, |
| uint32_t raster_color_space_id, |
| size_t size); |
| ~ServiceShaderTransferCacheEntry() final; |
| size_t CachedSize() const final; |
| bool Deserialize(GrContext* context, base::span<const uint8_t> data) final; |
| |
| sk_sp<PaintShader> shader() const { return shader_; } |
| uint32_t raster_color_space_id() const { return raster_color_space_id_; } |
| |
| private: |
| sk_sp<PaintShader> shader_; |
| uint32_t raster_color_space_id_; |
| size_t size_ = 0; |
| }; |
| |
| } // namespace cc |
| |
| #endif // CC_PAINT_SHADER_TRANSFER_CACHE_ENTRY_H_ |