diff options
author | danakj <danakj@chromium.org> | 2015-05-18 13:22:29 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-18 20:22:35 +0000 |
commit | 92015685c3dc2ef005e58c975269f532468e68b8 (patch) | |
tree | 94d71b2784e5a7e640cba6883d8c954cbabbca3c /cc/playback/filter_display_item.cc | |
parent | e3417c1e06cb80a5d1493e66a7f872297bd94e8f (diff) | |
download | chromium_src-92015685c3dc2ef005e58c975269f532468e68b8.zip chromium_src-92015685c3dc2ef005e58c975269f532468e68b8.tar.gz chromium_src-92015685c3dc2ef005e58c975269f532468e68b8.tar.bz2 |
cc: Move files out of cc/resources/.
This moves files into cc/playback/ cc/raster/ cc/tiles/ and cc/output/
and is based on the proposal found in
https://docs.google.com/spreadsheets/d/1wmPOmV9uqd9zNJ5l2TGePH7_vlSvPeXbC-Y3SeGJ_rc/edit#gid=0
R=enne, vmpstr
TBR=piman
BUG=488755
Review URL: https://codereview.chromium.org/1144693002
Cr-Commit-Position: refs/heads/master@{#330396}
Diffstat (limited to 'cc/playback/filter_display_item.cc')
-rw-r--r-- | cc/playback/filter_display_item.cc | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/cc/playback/filter_display_item.cc b/cc/playback/filter_display_item.cc new file mode 100644 index 0000000..8e849cf --- /dev/null +++ b/cc/playback/filter_display_item.cc @@ -0,0 +1,81 @@ +// 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/playback/filter_display_item.h" + +#include "base/strings/stringprintf.h" +#include "base/trace_event/trace_event_argument.h" +#include "cc/output/render_surface_filters.h" +#include "skia/ext/refptr.h" +#include "third_party/skia/include/core/SkCanvas.h" +#include "third_party/skia/include/core/SkImageFilter.h" +#include "third_party/skia/include/core/SkPaint.h" +#include "third_party/skia/include/core/SkXfermode.h" +#include "ui/gfx/skia_util.h" + +namespace cc { + +FilterDisplayItem::FilterDisplayItem() { +} + +FilterDisplayItem::~FilterDisplayItem() { +} + +void FilterDisplayItem::SetNew(const FilterOperations& filters, + const gfx::RectF& bounds) { + filters_ = filters; + bounds_ = bounds; + + size_t memory_usage = + sizeof(skia::RefPtr<SkImageFilter>) + sizeof(gfx::RectF); + DisplayItem::SetNew(true /* suitable_for_gpu_raster */, 1 /* op_count */, + memory_usage); +} + +void FilterDisplayItem::Raster(SkCanvas* canvas, + SkDrawPictureCallback* callback) const { + canvas->save(); + canvas->translate(bounds_.x(), bounds_.y()); + + skia::RefPtr<SkImageFilter> image_filter = + RenderSurfaceFilters::BuildImageFilter( + filters_, gfx::SizeF(bounds_.width(), bounds_.height())); + SkRect boundaries; + image_filter->computeFastBounds( + SkRect::MakeWH(bounds_.width(), bounds_.height()), &boundaries); + + SkPaint paint; + paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); + paint.setImageFilter(image_filter.get()); + canvas->saveLayer(&boundaries, &paint); + + canvas->translate(-bounds_.x(), -bounds_.y()); +} + +void FilterDisplayItem::AsValueInto( + base::trace_event::TracedValue* array) const { + array->AppendString(base::StringPrintf("FilterDisplayItem bounds: [%s]", + bounds_.ToString().c_str())); +} + +EndFilterDisplayItem::EndFilterDisplayItem() { + DisplayItem::SetNew(true /* suitable_for_gpu_raster */, 0 /* op_count */, + 0 /* memory_usage */); +} + +EndFilterDisplayItem::~EndFilterDisplayItem() { +} + +void EndFilterDisplayItem::Raster(SkCanvas* canvas, + SkDrawPictureCallback* callback) const { + canvas->restore(); + canvas->restore(); +} + +void EndFilterDisplayItem::AsValueInto( + base::trace_event::TracedValue* array) const { + array->AppendString("EndFilterDisplayItem"); +} + +} // namespace cc |