forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpixel_test.h
148 lines (122 loc) · 5.55 KB
/
pixel_test.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// Copyright 2013 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.
#ifndef CC_TEST_PIXEL_TEST_H_
#define CC_TEST_PIXEL_TEST_H_
#include <memory>
#include <utility>
#include <vector>
#include "base/files/file_util.h"
#include "base/memory/shared_memory_mapping.h"
#include "base/single_thread_task_runner.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "cc/test/pixel_comparator.h"
#include "cc/trees/layer_tree_settings.h"
#include "components/viz/client/client_resource_provider.h"
#include "components/viz/common/quads/compositor_render_pass.h"
#include "components/viz/common/resources/shared_bitmap.h"
#include "components/viz/service/display/gl_renderer.h"
#include "components/viz/service/display/output_surface.h"
#include "components/viz/service/display/skia_renderer.h"
#include "components/viz/service/display/software_renderer.h"
#include "components/viz/test/test_gpu_service_holder.h"
#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
#include "gpu/ipc/in_process_command_buffer.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/size.h"
namespace viz {
class CopyOutputResult;
class DirectRenderer;
class DisplayResourceProvider;
class GpuServiceImpl;
class TestSharedBitmapManager;
}
namespace cc {
class FakeOutputSurfaceClient;
class PixelTest : public testing::Test {
protected:
// Some graphics backends require command line or base::Feature initialization
// which must occur in the constructor to avoid potential races.
enum GraphicsBackend {
// The pixel test will be initialized for software or GL renderers. No work
// needs to be done in the constructor.
kDefault,
// SkiaRenderer with the Vulkan backend will be used.
kSkiaVulkan,
// SkiaRenderer with the Dawn backend will be used; on Linux this will
// initialize Vulkan, and on Windows this will initialize D3D12.
kSkiaDawn,
};
explicit PixelTest(GraphicsBackend backend = kDefault);
~PixelTest() override;
bool RunPixelTest(viz::AggregatedRenderPassList* pass_list,
const base::FilePath& ref_file,
const PixelComparator& comparator);
bool RunPixelTest(viz::AggregatedRenderPassList* pass_list,
std::vector<SkColor>* ref_pixels,
const PixelComparator& comparator);
bool RunPixelTestWithReadbackTarget(viz::AggregatedRenderPassList* pass_list,
viz::AggregatedRenderPass* target,
const base::FilePath& ref_file,
const PixelComparator& comparator);
bool RunPixelTestWithReadbackTargetAndArea(
viz::AggregatedRenderPassList* pass_list,
viz::AggregatedRenderPass* target,
const base::FilePath& ref_file,
const PixelComparator& comparator,
const gfx::Rect* copy_rect);
viz::ContextProvider* context_provider() const {
return output_surface_->context_provider();
}
viz::GpuServiceImpl* gpu_service() {
return gpu_service_holder_->gpu_service();
}
gpu::CommandBufferTaskExecutor* task_executor() {
return gpu_service_holder_->task_executor();
}
// Allocates a SharedMemory bitmap and registers it with the display
// compositor's SharedBitmapManager.
base::WritableSharedMemoryMapping AllocateSharedBitmapMemory(
const viz::SharedBitmapId& id,
const gfx::Size& size);
// Uses AllocateSharedBitmapMemory() then registers a ResourceId with the
// |child_resource_provider_|, and copies the contents of |source| into the
// software resource backing.
viz::ResourceId AllocateAndFillSoftwareResource(const gfx::Size& size,
const SkBitmap& source);
// |scoped_feature_list_| must be the first member to ensure that it is
// destroyed after any member that might be using it.
base::test::ScopedFeatureList scoped_feature_list_;
viz::TestGpuServiceHolder::ScopedResetter gpu_service_resetter_;
// For SkiaRenderer.
viz::TestGpuServiceHolder* gpu_service_holder_ = nullptr;
viz::RendererSettings renderer_settings_;
viz::DebugRendererSettings debug_settings_;
gfx::Size device_viewport_size_;
gfx::DisplayColorSpaces display_color_spaces_;
bool disable_picture_quad_image_filtering_;
std::unique_ptr<FakeOutputSurfaceClient> output_surface_client_;
std::unique_ptr<viz::OutputSurface> output_surface_;
std::unique_ptr<viz::TestSharedBitmapManager> shared_bitmap_manager_;
std::unique_ptr<viz::DisplayResourceProvider> resource_provider_;
scoped_refptr<viz::ContextProvider> child_context_provider_;
std::unique_ptr<viz::ClientResourceProvider> child_resource_provider_;
std::unique_ptr<viz::DirectRenderer> renderer_;
viz::SoftwareRenderer* software_renderer_ = nullptr;
std::unique_ptr<SkBitmap> result_bitmap_;
void SetUpGLWithoutRenderer(gfx::SurfaceOrigin output_surface_origin);
void SetUpGLRenderer(gfx::SurfaceOrigin output_surface_origin);
void SetUpSkiaRenderer(gfx::SurfaceOrigin output_surface_origin);
void SetUpSoftwareRenderer();
void TearDown() override;
void EnableExternalStencilTest();
private:
void ReadbackResult(base::OnceClosure quit_run_loop,
std::unique_ptr<viz::CopyOutputResult> result);
bool PixelsMatchReference(const base::FilePath& ref_file,
const PixelComparator& comparator);
std::unique_ptr<gl::DisableNullDrawGLBindings> enable_pixel_output_;
};
} // namespace cc
#endif // CC_TEST_PIXEL_TEST_H_