summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authordanakj <danakj@chromium.org>2015-05-07 17:26:13 -0700
committerCommit bot <commit-bot@chromium.org>2015-05-08 00:26:47 +0000
commita3e1fc441393c73090f9f598ddf5939b1ef0890f (patch)
treef6922fc2e63ad8633a86bedf11072cc2411761b4 /ui
parent60e3c1013c9a3bdd1c078db3f7d140e4ea5f2882 (diff)
downloadchromium_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.cc8
-rw-r--r--ui/gfx/image/image_skia.h2
-rw-r--r--ui/gfx/image/image_skia_rep.cc2
-rw-r--r--ui/gfx/image/image_skia_rep.h3
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_;