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 ALPHA_8, 31 ETC1 32 }; 33 enum UIResourceWrapMode { 34 CLAMP_TO_EDGE, 35 REPEAT 36 }; 37 GetSize()38 gfx::Size GetSize() const { return size_; } GetFormat()39 UIResourceFormat GetFormat() const { return format_; } GetWrapMode()40 UIResourceWrapMode GetWrapMode() const { return wrap_mode_; } SetWrapMode(UIResourceWrapMode wrap_mode)41 void SetWrapMode(UIResourceWrapMode wrap_mode) { wrap_mode_ = wrap_mode; } GetOpaque()42 bool GetOpaque() const { return opaque_; } SetOpaque(bool opaque)43 void SetOpaque(bool opaque) { opaque_ = opaque; } 44 45 // User must ensure that |skbitmap| is immutable. The SkBitmap Format should 46 // be 32-bit RGBA or 8-bit ALPHA. 47 explicit UIResourceBitmap(const SkBitmap& skbitmap); 48 UIResourceBitmap(const gfx::Size& size, bool is_opaque); 49 UIResourceBitmap(const skia::RefPtr<SkPixelRef>& pixel_ref, 50 const gfx::Size& size); 51 ~UIResourceBitmap(); 52 53 private: 54 friend class AutoLockUIResourceBitmap; 55 56 void Create(const skia::RefPtr<SkPixelRef>& pixel_ref, 57 const gfx::Size& size, 58 UIResourceFormat format); 59 60 skia::RefPtr<SkPixelRef> pixel_ref_; 61 UIResourceFormat format_; 62 UIResourceWrapMode wrap_mode_; 63 gfx::Size size_; 64 bool opaque_; 65 }; 66 67 class CC_EXPORT AutoLockUIResourceBitmap { 68 public: 69 explicit AutoLockUIResourceBitmap(const UIResourceBitmap& bitmap); 70 ~AutoLockUIResourceBitmap(); 71 const uint8_t* GetPixels() const; 72 73 private: 74 const UIResourceBitmap& bitmap_; 75 }; 76 77 } // namespace cc 78 79 #endif // CC_RESOURCES_UI_RESOURCE_BITMAP_H_ 80