blob: 6c99e7d3c2be27934b18e5a2a1fbf1f826fcdbba [file] [log] [blame]
// Copyright 2015 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/test/fake_display_list_raster_source.h"
#include <limits>
#include "base/synchronization/waitable_event.h"
#include "cc/test/fake_display_list_recording_source.h"
#include "cc/test/skia_common.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkSurface.h"
#include "ui/gfx/geometry/size.h"
namespace cc {
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreateInfiniteFilled() {
gfx::Size size(std::numeric_limits<int>::max() / 10,
std::numeric_limits<int>::max() / 10);
return CreateFilled(size);
}
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreateFilled(const gfx::Size& size) {
auto recording_source =
FakeDisplayListRecordingSource::CreateFilledRecordingSource(size);
SkPaint red_paint;
red_paint.setColor(SK_ColorRED);
recording_source->add_draw_rect_with_paint(gfx::Rect(size), red_paint);
gfx::Size smaller_size(size.width() - 10, size.height() - 10);
SkPaint green_paint;
green_paint.setColor(SK_ColorGREEN);
recording_source->add_draw_rect_with_paint(gfx::Rect(smaller_size),
green_paint);
recording_source->Rerecord();
return make_scoped_refptr(
new FakeDisplayListRasterSource(recording_source.get(), false));
}
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreateFilledLCD(const gfx::Size& size) {
auto recording_source =
FakeDisplayListRecordingSource::CreateFilledRecordingSource(size);
SkPaint red_paint;
red_paint.setColor(SK_ColorRED);
recording_source->add_draw_rect_with_paint(gfx::Rect(size), red_paint);
gfx::Size smaller_size(size.width() - 10, size.height() - 10);
SkPaint green_paint;
green_paint.setColor(SK_ColorGREEN);
recording_source->add_draw_rect_with_paint(gfx::Rect(smaller_size),
green_paint);
recording_source->Rerecord();
return make_scoped_refptr(
new FakeDisplayListRasterSource(recording_source.get(), true));
}
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreateFilledSolidColor(const gfx::Size& size) {
auto recording_source =
FakeDisplayListRecordingSource::CreateFilledRecordingSource(size);
SkPaint red_paint;
red_paint.setColor(SK_ColorRED);
recording_source->add_draw_rect_with_paint(gfx::Rect(size), red_paint);
recording_source->Rerecord();
auto raster_source = make_scoped_refptr(
new FakeDisplayListRasterSource(recording_source.get(), false));
if (!raster_source->IsSolidColor())
ADD_FAILURE() << "Not solid color!";
return raster_source;
}
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreatePartiallyFilled(
const gfx::Size& size,
const gfx::Rect& recorded_viewport) {
DCHECK(recorded_viewport.IsEmpty() ||
gfx::Rect(size).Contains(recorded_viewport));
auto recording_source = FakeDisplayListRecordingSource::CreateRecordingSource(
recorded_viewport, size);
SkPaint red_paint;
red_paint.setColor(SK_ColorRED);
recording_source->add_draw_rect_with_paint(gfx::Rect(size), red_paint);
gfx::Size smaller_size(size.width() - 10, size.height() - 10);
SkPaint green_paint;
green_paint.setColor(SK_ColorGREEN);
recording_source->add_draw_rect_with_paint(gfx::Rect(smaller_size),
green_paint);
recording_source->Rerecord();
recording_source->SetRecordedViewport(recorded_viewport);
return make_scoped_refptr(
new FakeDisplayListRasterSource(recording_source.get(), false));
}
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreatePartiallyFilledWithImages(
const gfx::Size& size,
const gfx::Rect& recorded_viewport) {
DCHECK(recorded_viewport.IsEmpty() ||
gfx::Rect(size).Contains(recorded_viewport));
auto recording_source = FakeDisplayListRecordingSource::CreateRecordingSource(
recorded_viewport, size);
recording_source->SetGenerateDiscardableImagesMetadata(true);
SkPaint red_paint;
red_paint.setColor(SK_ColorRED);
recording_source->add_draw_rect_with_paint(gfx::Rect(size), red_paint);
gfx::Size smaller_size(size.width() - 10, size.height() - 10);
SkPaint green_paint;
green_paint.setColor(SK_ColorGREEN);
recording_source->add_draw_rect_with_paint(gfx::Rect(smaller_size),
green_paint);
skia::RefPtr<SkImage> image = CreateDiscardableImage(smaller_size);
recording_source->add_draw_image(image.get(), gfx::Point());
recording_source->Rerecord();
recording_source->SetRecordedViewport(recorded_viewport);
return make_scoped_refptr(
new FakeDisplayListRasterSource(recording_source.get(), false));
}
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreateEmpty(const gfx::Size& size) {
auto recording_source =
FakeDisplayListRecordingSource::CreateFilledRecordingSource(size);
return make_scoped_refptr(
new FakeDisplayListRasterSource(recording_source.get(), false));
}
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreateFromRecordingSource(
const DisplayListRecordingSource* recording_source,
bool can_use_lcd) {
return make_scoped_refptr(
new FakeDisplayListRasterSource(recording_source, can_use_lcd));
}
scoped_refptr<FakeDisplayListRasterSource>
FakeDisplayListRasterSource::CreateFromRecordingSourceWithWaitable(
const DisplayListRecordingSource* recording_source,
bool can_use_lcd,
base::WaitableEvent* playback_allowed_event) {
return make_scoped_refptr(new FakeDisplayListRasterSource(
recording_source, can_use_lcd, playback_allowed_event));
}
FakeDisplayListRasterSource::FakeDisplayListRasterSource(
const DisplayListRecordingSource* recording_source,
bool can_use_lcd)
: DisplayListRasterSource(recording_source, can_use_lcd),
playback_allowed_event_(nullptr) {}
FakeDisplayListRasterSource::FakeDisplayListRasterSource(
const DisplayListRecordingSource* recording_source,
bool can_use_lcd,
base::WaitableEvent* playback_allowed_event)
: DisplayListRasterSource(recording_source, can_use_lcd),
playback_allowed_event_(playback_allowed_event) {}
FakeDisplayListRasterSource::~FakeDisplayListRasterSource() {}
void FakeDisplayListRasterSource::PlaybackToCanvas(
SkCanvas* canvas,
const gfx::Rect& canvas_bitmap_rect,
const gfx::Rect& canvas_playback_rect,
float contents_scale) const {
if (playback_allowed_event_)
playback_allowed_event_->Wait();
DisplayListRasterSource::PlaybackToCanvas(
canvas, canvas_bitmap_rect, canvas_playback_rect, contents_scale);
}
} // namespace cc