diff options
author | danakj <danakj@chromium.org> | 2015-05-07 17:26:13 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-08 00:26:47 +0000 |
commit | a3e1fc441393c73090f9f598ddf5939b1ef0890f (patch) | |
tree | f6922fc2e63ad8633a86bedf11072cc2411761b4 /ui | |
parent | 60e3c1013c9a3bdd1c078db3f7d140e4ea5f2882 (diff) | |
download | chromium_src-a3e1fc441393c73090f9f598ddf5939b1ef0890f.zip chromium_src-a3e1fc441393c73090f9f598ddf5939b1ef0890f.tar.gz chromium_src-a3e1fc441393c73090f9f598ddf5939b1ef0890f.tar.bz2 |
gfx: Make ImageSkipRep bitmaps immutable.
This avoids having to copy them when inserting them into a recording
during paint.
This patch changes the time to do UpdateLayers for a single tab
loading spinner from 0.206279ms to 0.163527 on a linux z620, giving
a 21% reduction in frame record time. I used a mean of 2000 samples
(throwing out the first 100) in each run to reduce noise.
R=sky
BUG=466426
Review URL: https://codereview.chromium.org/1128403003
Cr-Commit-Position: refs/heads/master@{#328887}
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gfx/image/image_skia.cc | 8 | ||||
-rw-r--r-- | ui/gfx/image/image_skia.h | 2 | ||||
-rw-r--r-- | ui/gfx/image/image_skia_rep.cc | 2 | ||||
-rw-r--r-- | ui/gfx/image/image_skia_rep.h | 3 |
4 files changed, 7 insertions, 8 deletions
diff --git a/ui/gfx/image/image_skia.cc b/ui/gfx/image/image_skia.cc index 5e4410a..7158f24 100644 --- a/ui/gfx/image/image_skia.cc +++ b/ui/gfx/image/image_skia.cc @@ -466,11 +466,11 @@ void ImageSkia::Init(const ImageSkiaRep& image_rep) { storage_->image_reps().push_back(image_rep); } -SkBitmap& ImageSkia::GetBitmap() const { +const SkBitmap& ImageSkia::GetBitmap() const { if (isNull()) { // Callers expect a ImageSkiaRep even if it is |isNull()|. // TODO(pkotwicz): Fix this. - return NullImageRep().mutable_sk_bitmap(); + return NullImageRep().sk_bitmap(); } // TODO(oshima): This made a few tests flaky on Windows. @@ -481,8 +481,8 @@ SkBitmap& ImageSkia::GetBitmap() const { ImageSkiaReps::iterator it = storage_->FindRepresentation(1.0f, true); if (it != storage_->image_reps().end()) - return it->mutable_sk_bitmap(); - return NullImageRep().mutable_sk_bitmap(); + return it->sk_bitmap(); + return NullImageRep().sk_bitmap(); } bool ImageSkia::CanRead() const { diff --git a/ui/gfx/image/image_skia.h b/ui/gfx/image/image_skia.h index fa5d070..941ebc9f 100644 --- a/ui/gfx/image/image_skia.h +++ b/ui/gfx/image/image_skia.h @@ -156,7 +156,7 @@ class GFX_EXPORT ImageSkia { // If the image rep's bitmap is empty, ImageStorage is set to NULL. void Init(const gfx::ImageSkiaRep& image_rep); - SkBitmap& GetBitmap() const; + const SkBitmap& GetBitmap() const; // Checks if the current thread can read/modify the ImageSkia. bool CanRead() const; diff --git a/ui/gfx/image/image_skia_rep.cc b/ui/gfx/image/image_skia_rep.cc index 8bc5214..a3f9b472 100644 --- a/ui/gfx/image/image_skia_rep.cc +++ b/ui/gfx/image/image_skia_rep.cc @@ -18,11 +18,13 @@ ImageSkiaRep::ImageSkiaRep(const gfx::Size& size, float scale) : scale_(scale) { bitmap_.allocN32Pixels(static_cast<int>(size.width() * this->scale()), static_cast<int>(size.height() * this->scale())); bitmap_.eraseColor(SK_ColorRED); + bitmap_.setImmutable(); } ImageSkiaRep::ImageSkiaRep(const SkBitmap& src, float scale) : bitmap_(src), scale_(scale) { + bitmap_.setImmutable(); } int ImageSkiaRep::GetWidth() const { diff --git a/ui/gfx/image/image_skia_rep.h b/ui/gfx/image/image_skia_rep.h index acf9919..817ddb5 100644 --- a/ui/gfx/image/image_skia_rep.h +++ b/ui/gfx/image/image_skia_rep.h @@ -58,9 +58,6 @@ class GFX_EXPORT ImageSkiaRep { const SkBitmap& sk_bitmap() const { return bitmap_; } private: - friend class ImageSkia; - SkBitmap& mutable_sk_bitmap() { return bitmap_; } - SkBitmap bitmap_; float scale_; |