1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_RESOURCES_UI_RESOURCE_BITMAP_H_ 6 #define CC_RESOURCES_UI_RESOURCE_BITMAP_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "cc/base/cc_export.h" 11 #include "skia/ext/refptr.h" 12 #include "third_party/skia/include/core/SkPixelRef.h" 13 #include "third_party/skia/include/core/SkTypes.h" 14 #include "ui/gfx/size.h" 15 16 class SkBitmap; 17 18 namespace cc { 19 20 class ETC1PixelRef; 21 22 // A bitmap class that contains a ref-counted reference to a SkPixelRef that 23 // holds the content of the bitmap (cannot use SkBitmap because of ETC1). 24 // Thread-safety (by ways of SkPixelRef) ensures that both main and impl threads 25 // can hold references to the bitmap and that asynchronous uploads are allowed. 26 class CC_EXPORT UIResourceBitmap { 27 public: 28 enum UIResourceFormat { 29 RGBA8, 30 ETC1 31 }; 32 enum UIResourceWrapMode { 33 CLAMP_TO_EDGE, 34 REPEAT 35 }; 36 GetSize()37 gfx::Size GetSize() const { return size_; } GetFormat()38 UIResourceFormat GetFormat() const { return format_; } GetWrapMode()39 UIResourceWrapMode GetWrapMode() const { return wrap_mode_; } SetWrapMode(UIResourceWrapMode wrap_mode)40 void SetWrapMode(UIResourceWrapMode wrap_mode) { wrap_mode_ = wrap_mode; } GetOpaque()41 bool GetOpaque() const { return opaque_; } SetOpaque(bool opaque)42 void SetOpaque(bool opaque) { opaque_ = opaque; } 43 44 // User must ensure that |skbitmap| is immutable. The SkBitmap Format should 45 // be 32-bit RGBA. 46 explicit UIResourceBitmap(const SkBitmap& skbitmap); 47 48 UIResourceBitmap(const skia::RefPtr<ETC1PixelRef>& etc1_pixel_ref, 49 gfx::Size size); 50 51 ~UIResourceBitmap(); 52 53 private: 54 friend class AutoLockUIResourceBitmap; 55 void Create(const skia::RefPtr<SkPixelRef>& pixel_ref, 56 UIResourceFormat format, 57 gfx::Size size); 58 59 skia::RefPtr<SkPixelRef> pixel_ref_; 60 UIResourceFormat format_; 61 UIResourceWrapMode wrap_mode_; 62 gfx::Size size_; 63 bool opaque_; 64 }; 65 66 class CC_EXPORT AutoLockUIResourceBitmap { 67 public: 68 explicit AutoLockUIResourceBitmap(const UIResourceBitmap& bitmap); 69 ~AutoLockUIResourceBitmap(); 70 const uint8_t* GetPixels() const; 71 72 private: 73 const UIResourceBitmap& bitmap_; 74 }; 75 76 } // namespace cc 77 78 #endif // CC_RESOURCES_UI_RESOURCE_BITMAP_H_ 79