// Copyright 2014 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/drawing_display_item.h" #include #include "base/strings/stringprintf.h" #include "base/trace_event/trace_event_argument.h" #include "cc/debug/picture_debug_util.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkDrawPictureCallback.h" #include "third_party/skia/include/core/SkMatrix.h" #include "third_party/skia/include/core/SkPicture.h" #include "third_party/skia/include/utils/SkPictureUtils.h" namespace cc { DrawingDisplayItem::DrawingDisplayItem(skia::RefPtr picture) : picture_(picture) { } DrawingDisplayItem::~DrawingDisplayItem() { } void DrawingDisplayItem::Raster(SkCanvas* canvas, SkDrawPictureCallback* callback) const { // SkPicture always does a wrapping save/restore on the canvas, so it is not // necessary here. if (callback) picture_->playback(canvas, callback); else canvas->drawPicture(picture_.get()); } bool DrawingDisplayItem::IsSuitableForGpuRasterization() const { return picture_->suitableForGpuRasterization(NULL); } int DrawingDisplayItem::ApproximateOpCount() const { return picture_->approximateOpCount(); } size_t DrawingDisplayItem::PictureMemoryUsage() const { DCHECK(picture_); return SkPictureUtils::ApproximateBytesUsed(picture_.get()); } void DrawingDisplayItem::AsValueInto( base::trace_event::TracedValue* array) const { array->BeginDictionary(); array->SetString("name", "DrawingDisplayItem"); array->SetString( "cullRect", base::StringPrintf("[%f,%f,%f,%f]", picture_->cullRect().x(), picture_->cullRect().y(), picture_->cullRect().width(), picture_->cullRect().height())); std::string b64_picture; PictureDebugUtil::SerializeAsBase64(picture_.get(), &b64_picture); array->SetString("skp64", b64_picture); array->EndDictionary(); } scoped_ptr DrawingDisplayItem::Clone() { return Create(picture_); } } // namespace cc