Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(873)

Unified Diff: cc/resources/picture.cc

Issue 1144693002: cc: Move files out of cc/resources/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: resources: android Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/picture.h ('k') | cc/resources/picture_layer_tiling.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/picture.cc
diff --git a/cc/resources/picture.cc b/cc/resources/picture.cc
deleted file mode 100644
index cd465053715e2eb1587c3c5d9997b6a3c3a764d0..0000000000000000000000000000000000000000
--- a/cc/resources/picture.cc
+++ /dev/null
@@ -1,340 +0,0 @@
-// Copyright 2012 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.
-
-#include "cc/resources/picture.h"
-
-#include <set>
-#include <string>
-
-#include "base/base64.h"
-#include "base/trace_event/trace_event.h"
-#include "base/trace_event/trace_event_argument.h"
-#include "base/values.h"
-#include "cc/base/math_util.h"
-#include "cc/base/util.h"
-#include "cc/debug/picture_debug_util.h"
-#include "cc/debug/traced_picture.h"
-#include "cc/debug/traced_value.h"
-#include "cc/layers/content_layer_client.h"
-#include "skia/ext/pixel_ref_utils.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "third_party/skia/include/core/SkDrawPictureCallback.h"
-#include "third_party/skia/include/core/SkPaint.h"
-#include "third_party/skia/include/core/SkPictureRecorder.h"
-#include "third_party/skia/include/core/SkStream.h"
-#include "third_party/skia/include/utils/SkNullCanvas.h"
-#include "third_party/skia/include/utils/SkPictureUtils.h"
-#include "ui/gfx/codec/jpeg_codec.h"
-#include "ui/gfx/codec/png_codec.h"
-#include "ui/gfx/geometry/rect_conversions.h"
-#include "ui/gfx/skia_util.h"
-
-namespace cc {
-
-namespace {
-
-bool DecodeBitmap(const void* buffer, size_t size, SkBitmap* bm) {
- const unsigned char* data = static_cast<const unsigned char *>(buffer);
-
- // Try PNG first.
- if (gfx::PNGCodec::Decode(data, size, bm))
- return true;
-
- // Try JPEG.
- scoped_ptr<SkBitmap> decoded_jpeg(gfx::JPEGCodec::Decode(data, size));
- if (decoded_jpeg) {
- *bm = *decoded_jpeg;
- return true;
- }
- return false;
-}
-
-} // namespace
-
-scoped_refptr<Picture> Picture::Create(
- const gfx::Rect& layer_rect,
- ContentLayerClient* client,
- const gfx::Size& tile_grid_size,
- bool gather_pixel_refs,
- RecordingSource::RecordingMode recording_mode) {
- scoped_refptr<Picture> picture =
- make_scoped_refptr(new Picture(layer_rect, tile_grid_size));
-
- picture->Record(client, recording_mode);
- if (gather_pixel_refs)
- picture->GatherPixelRefs();
-
- return picture;
-}
-
-Picture::Picture(const gfx::Rect& layer_rect, const gfx::Size& tile_grid_size)
- : layer_rect_(layer_rect), pixel_refs_(tile_grid_size) {
- // Instead of recording a trace event for object creation here, we wait for
- // the picture to be recorded in Picture::Record.
-}
-
-scoped_refptr<Picture> Picture::CreateFromSkpValue(const base::Value* value) {
- // Decode the picture from base64.
- std::string encoded;
- if (!value->GetAsString(&encoded))
- return NULL;
-
- std::string decoded;
- base::Base64Decode(encoded, &decoded);
- SkMemoryStream stream(decoded.data(), decoded.size());
-
- // Read the picture. This creates an empty picture on failure.
- SkPicture* skpicture = SkPicture::CreateFromStream(&stream, &DecodeBitmap);
- if (skpicture == NULL)
- return NULL;
-
- gfx::Rect layer_rect(gfx::SkIRectToRect(skpicture->cullRect().roundOut()));
- return make_scoped_refptr(new Picture(skpicture, layer_rect));
-}
-
-scoped_refptr<Picture> Picture::CreateFromValue(const base::Value* raw_value) {
- const base::DictionaryValue* value = NULL;
- if (!raw_value->GetAsDictionary(&value))
- return NULL;
-
- // Decode the picture from base64.
- std::string encoded;
- if (!value->GetString("skp64", &encoded))
- return NULL;
-
- std::string decoded;
- base::Base64Decode(encoded, &decoded);
- SkMemoryStream stream(decoded.data(), decoded.size());
-
- const base::Value* layer_rect_value = NULL;
- if (!value->Get("params.layer_rect", &layer_rect_value))
- return NULL;
-
- gfx::Rect layer_rect;
- if (!MathUtil::FromValue(layer_rect_value, &layer_rect))
- return NULL;
-
- // Read the picture. This creates an empty picture on failure.
- SkPicture* skpicture = SkPicture::CreateFromStream(&stream, &DecodeBitmap);
- if (skpicture == NULL)
- return NULL;
-
- return make_scoped_refptr(new Picture(skpicture, layer_rect));
-}
-
-Picture::Picture(SkPicture* picture, const gfx::Rect& layer_rect)
- : layer_rect_(layer_rect),
- picture_(skia::AdoptRef(picture)),
- pixel_refs_(layer_rect.size()) {
-}
-
-Picture::Picture(const skia::RefPtr<SkPicture>& picture,
- const gfx::Rect& layer_rect,
- const PixelRefMap& pixel_refs)
- : layer_rect_(layer_rect), picture_(picture), pixel_refs_(pixel_refs) {
-}
-
-Picture::~Picture() {
- TRACE_EVENT_OBJECT_DELETED_WITH_ID(
- TRACE_DISABLED_BY_DEFAULT("cc.debug.picture"), "cc::Picture", this);
-}
-
-bool Picture::IsSuitableForGpuRasterization(const char** reason) const {
- DCHECK(picture_);
-
- // TODO(hendrikw): SkPicture::suitableForGpuRasterization takes a GrContext.
- // Currently the GrContext isn't used, and should probably be removed from
- // skia.
- return picture_->suitableForGpuRasterization(nullptr, reason);
-}
-
-int Picture::ApproximateOpCount() const {
- DCHECK(picture_);
- return picture_->approximateOpCount();
-}
-
-size_t Picture::ApproximateMemoryUsage() const {
- DCHECK(picture_);
- return SkPictureUtils::ApproximateBytesUsed(picture_.get());
-}
-
-bool Picture::HasText() const {
- DCHECK(picture_);
- return picture_->hasText();
-}
-
-void Picture::Record(ContentLayerClient* painter,
- RecordingSource::RecordingMode recording_mode) {
- TRACE_EVENT2("cc",
- "Picture::Record",
- "data",
- AsTraceableRecordData(),
- "recording_mode",
- recording_mode);
-
- DCHECK(!picture_);
-
- SkRTreeFactory factory;
- SkPictureRecorder recorder;
-
- skia::RefPtr<SkCanvas> canvas;
- canvas = skia::SharePtr(recorder.beginRecording(
- layer_rect_.width(), layer_rect_.height(), &factory,
- SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag));
-
- ContentLayerClient::PaintingControlSetting painting_control =
- ContentLayerClient::PAINTING_BEHAVIOR_NORMAL;
-
- switch (recording_mode) {
- case RecordingSource::RECORD_NORMALLY:
- // Already setup for normal recording.
- break;
- case RecordingSource::RECORD_WITH_SK_NULL_CANVAS:
- canvas = skia::AdoptRef(SkCreateNullCanvas());
- break;
- case RecordingSource::RECORD_WITH_PAINTING_DISABLED:
- // We pass a disable flag through the paint calls when perfromance
- // testing (the only time this case should ever arise) when we want to
- // prevent the Blink GraphicsContext object from consuming any compute
- // time.
- canvas = skia::AdoptRef(SkCreateNullCanvas());
- painting_control = ContentLayerClient::DISPLAY_LIST_PAINTING_DISABLED;
- break;
- case RecordingSource::RECORD_WITH_CACHING_DISABLED:
- // This mode should give the same results as RECORD_NORMALLY.
- painting_control = ContentLayerClient::DISPLAY_LIST_CACHING_DISABLED;
- break;
- default:
- // case RecordingSource::RECORD_WITH_CONSTRUCTION_DISABLED should
- // not be reached
- NOTREACHED();
- }
-
- canvas->save();
- canvas->translate(SkFloatToScalar(-layer_rect_.x()),
- SkFloatToScalar(-layer_rect_.y()));
-
- canvas->clipRect(gfx::RectToSkRect(layer_rect_));
-
- painter->PaintContents(canvas.get(), layer_rect_, painting_control);
-
- canvas->restore();
- picture_ = skia::AdoptRef(recorder.endRecordingAsPicture());
- DCHECK(picture_);
-
- EmitTraceSnapshot();
-}
-
-void Picture::GatherPixelRefs() {
- TRACE_EVENT2("cc", "Picture::GatherPixelRefs",
- "width", layer_rect_.width(),
- "height", layer_rect_.height());
-
- DCHECK(picture_);
- DCHECK(pixel_refs_.empty());
- if (!WillPlayBackBitmaps())
- return;
-
- pixel_refs_.GatherPixelRefsFromPicture(picture_.get());
-}
-
-int Picture::Raster(SkCanvas* canvas,
- SkPicture::AbortCallback* callback,
- const Region& negated_content_region,
- float contents_scale) const {
- TRACE_EVENT_BEGIN1(
- "cc",
- "Picture::Raster",
- "data",
- AsTraceableRasterData(contents_scale));
-
- DCHECK(picture_);
-
- canvas->save();
-
- for (Region::Iterator it(negated_content_region); it.has_rect(); it.next())
- canvas->clipRect(gfx::RectToSkRect(it.rect()), SkRegion::kDifference_Op);
-
- canvas->scale(contents_scale, contents_scale);
- canvas->translate(layer_rect_.x(), layer_rect_.y());
- if (callback) {
- // If we have a callback, we need to call |draw()|, |drawPicture()| doesn't
- // take a callback. This is used by |AnalysisCanvas| to early out.
- picture_->playback(canvas, callback);
- } else {
- // Prefer to call |drawPicture()| on the canvas since it could place the
- // entire picture on the canvas instead of parsing the skia operations.
- canvas->drawPicture(picture_.get());
- }
- SkIRect bounds;
- canvas->getClipDeviceBounds(&bounds);
- canvas->restore();
- TRACE_EVENT_END1(
- "cc", "Picture::Raster",
- "num_pixels_rasterized", bounds.width() * bounds.height());
- return bounds.width() * bounds.height();
-}
-
-void Picture::Replay(SkCanvas* canvas, SkPicture::AbortCallback* callback) {
- TRACE_EVENT_BEGIN0("cc", "Picture::Replay");
- DCHECK(picture_);
- picture_->playback(canvas, callback);
- SkIRect bounds;
- canvas->getClipDeviceBounds(&bounds);
- TRACE_EVENT_END1("cc", "Picture::Replay",
- "num_pixels_replayed", bounds.width() * bounds.height());
-}
-
-scoped_ptr<base::Value> Picture::AsValue() const {
- // Encode the picture as base64.
- scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
- res->Set("params.layer_rect", MathUtil::AsValue(layer_rect_).release());
- std::string b64_picture;
- PictureDebugUtil::SerializeAsBase64(picture_.get(), &b64_picture);
- res->SetString("skp64", b64_picture);
- return res.Pass();
-}
-
-void Picture::EmitTraceSnapshot() const {
- TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(
- TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") ","
- TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture"),
- "cc::Picture",
- this,
- TracedPicture::AsTraceablePicture(this));
-}
-
-void Picture::EmitTraceSnapshotAlias(Picture* original) const {
- TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(
- TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") ","
- TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture"),
- "cc::Picture",
- this,
- TracedPicture::AsTraceablePictureAlias(original));
-}
-
-PixelRefMap::Iterator Picture::GetPixelRefMapIterator(
- const gfx::Rect& layer_rect) const {
- return PixelRefMap::Iterator(layer_rect, this);
-}
-
-scoped_refptr<base::trace_event::ConvertableToTraceFormat>
- Picture::AsTraceableRasterData(float scale) const {
- scoped_refptr<base::trace_event::TracedValue> raster_data =
- new base::trace_event::TracedValue();
- TracedValue::SetIDRef(this, raster_data.get(), "picture_id");
- raster_data->SetDouble("scale", scale);
- return raster_data;
-}
-
-scoped_refptr<base::trace_event::ConvertableToTraceFormat>
- Picture::AsTraceableRecordData() const {
- scoped_refptr<base::trace_event::TracedValue> record_data =
- new base::trace_event::TracedValue();
- TracedValue::SetIDRef(this, record_data.get(), "picture_id");
- MathUtil::AddToTracedValue("layer_rect", layer_rect_, record_data.get());
- return record_data;
-}
-
-} // namespace cc
« no previous file with comments | « cc/resources/picture.h ('k') | cc/resources/picture_layer_tiling.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698