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

Side by Side Diff: content/test/layouttest_support.cc

Issue 2962073002: OOPIF support for layout test pixel dumps.
Patch Set: Rebasing on top of 8bc8e844008b (still works locally). Created 3 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/public/test/layouttest_support.h" 5 #include "content/public/test/layouttest_support.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <unordered_map> 10 #include <unordered_map>
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 283
284 void SetMockDeviceOrientationData(const OrientationData& data) { 284 void SetMockDeviceOrientationData(const OrientationData& data) {
285 RendererBlinkPlatformImpl::SetMockDeviceOrientationDataForTesting(data); 285 RendererBlinkPlatformImpl::SetMockDeviceOrientationDataForTesting(data);
286 } 286 }
287 287
288 namespace { 288 namespace {
289 289
290 // Invokes a callback on commit (on the main thread) to obtain the output 290 // Invokes a callback on commit (on the main thread) to obtain the output
291 // surface that should be used, then asks that output surface to submit the copy 291 // surface that should be used, then asks that output surface to submit the copy
292 // request at SwapBuffers time. 292 // request at SwapBuffers time.
293 // DO NOT SUBMIT - clean this up / do this right...
293 class CopyRequestSwapPromise : public cc::SwapPromise { 294 class CopyRequestSwapPromise : public cc::SwapPromise {
294 public: 295 public:
295 using FindLayerTreeFrameSinkCallback = 296 using FindLayerTreeFrameSinkCallback =
296 base::Callback<viz::TestLayerTreeFrameSink*()>; 297 base::Callback<viz::TestLayerTreeFrameSink*()>;
297 CopyRequestSwapPromise( 298 CopyRequestSwapPromise(std::unique_ptr<cc::CopyOutputRequest> request)
298 std::unique_ptr<cc::CopyOutputRequest> request, 299 : copy_request_(std::move(request)) {}
299 FindLayerTreeFrameSinkCallback find_layer_tree_frame_sink_callback)
300 : copy_request_(std::move(request)),
301 find_layer_tree_frame_sink_callback_(
302 std::move(find_layer_tree_frame_sink_callback)) {}
303 300
304 // cc::SwapPromise implementation. 301 // cc::SwapPromise implementation.
305 void OnCommit() override { 302 void OnCommit() override { copy_request_->SendEmptyResult(); }
306 layer_tree_frame_sink_from_commit_ =
307 find_layer_tree_frame_sink_callback_.Run();
308 DCHECK(layer_tree_frame_sink_from_commit_);
309 }
310 void DidActivate() override {} 303 void DidActivate() override {}
311 void WillSwap(cc::CompositorFrameMetadata*) override { 304 void WillSwap(cc::CompositorFrameMetadata*) override {}
312 layer_tree_frame_sink_from_commit_->RequestCopyOfOutput(
313 std::move(copy_request_));
314 }
315 void DidSwap() override {} 305 void DidSwap() override {}
316 DidNotSwapAction DidNotSwap(DidNotSwapReason r) override { 306 DidNotSwapAction DidNotSwap(DidNotSwapReason r) override {
317 // The compositor should always swap in layout test mode. 307 // The compositor should always swap in layout test mode.
318 NOTREACHED() << "did not swap for reason " << r; 308 NOTREACHED() << "did not swap for reason " << r;
319 return DidNotSwapAction::BREAK_PROMISE; 309 return DidNotSwapAction::BREAK_PROMISE;
320 } 310 }
321 int64_t TraceId() const override { return 0; } 311 int64_t TraceId() const override { return 0; }
322 312
323 private: 313 private:
324 std::unique_ptr<cc::CopyOutputRequest> copy_request_; 314 std::unique_ptr<cc::CopyOutputRequest> copy_request_;
325 FindLayerTreeFrameSinkCallback find_layer_tree_frame_sink_callback_;
326 viz::TestLayerTreeFrameSink* layer_tree_frame_sink_from_commit_ = nullptr;
327 }; 315 };
328 316
329 } // namespace 317 } // namespace
330 318
331 class LayoutTestDependenciesImpl : public LayoutTestDependencies, 319 class LayoutTestDependenciesImpl : public LayoutTestDependencies,
332 public viz::TestLayerTreeFrameSinkClient { 320 public viz::TestLayerTreeFrameSinkClient {
333 public: 321 public:
334 std::unique_ptr<cc::LayerTreeFrameSink> CreateLayerTreeFrameSink(
335 int32_t routing_id,
336 scoped_refptr<gpu::GpuChannelHost> gpu_channel,
337 scoped_refptr<cc::ContextProvider> compositor_context_provider,
338 scoped_refptr<cc::ContextProvider> worker_context_provider,
339 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
340 CompositorDependencies* deps) override {
341 // This could override the GpuChannel for a LayerTreeFrameSink that was
342 // previously being created but in that case the old GpuChannel would be
343 // lost as would the LayerTreeFrameSink.
344 gpu_channel_ = gpu_channel;
345
346 auto* task_runner = deps->GetCompositorImplThreadTaskRunner().get();
347 bool synchronous_composite = !task_runner;
348 if (!task_runner)
349 task_runner = base::ThreadTaskRunnerHandle::Get().get();
350
351 cc::RendererSettings renderer_settings;
352 base::CommandLine* cmd = base::CommandLine::ForCurrentProcess();
353 renderer_settings.enable_color_correct_rendering =
354 base::FeatureList::IsEnabled(features::kColorCorrectRendering);
355 renderer_settings.allow_antialiasing &=
356 !cmd->HasSwitch(cc::switches::kDisableCompositedAntialiasing);
357 renderer_settings.highp_threshold_min = 2048;
358
359 constexpr bool disable_display_vsync = false;
360 constexpr double refresh_rate = 60.0;
361 auto layer_tree_frame_sink = base::MakeUnique<viz::TestLayerTreeFrameSink>(
362 std::move(compositor_context_provider),
363 std::move(worker_context_provider), nullptr /* shared_bitmap_manager */,
364 gpu_memory_buffer_manager, renderer_settings, task_runner,
365 synchronous_composite, disable_display_vsync, refresh_rate);
366 layer_tree_frame_sink->SetClient(this);
367 layer_tree_frame_sinks_[routing_id] = layer_tree_frame_sink.get();
368 return std::move(layer_tree_frame_sink);
369 }
370
371 std::unique_ptr<cc::SwapPromise> RequestCopyOfOutput( 322 std::unique_ptr<cc::SwapPromise> RequestCopyOfOutput(
372 int32_t routing_id, 323 int32_t routing_id,
373 std::unique_ptr<cc::CopyOutputRequest> request) override { 324 std::unique_ptr<cc::CopyOutputRequest> request) override {
374 // Note that we can't immediately check layer_tree_frame_sinks_, since it 325 // Note that we can't immediately check layer_tree_frame_sinks_, since it
375 // may not have been created yet. Instead, we wait until OnCommit to find 326 // may not have been created yet. Instead, we wait until OnCommit to find
376 // the currently active LayerTreeFrameSink for the given RenderWidget 327 // the currently active LayerTreeFrameSink for the given RenderWidget
377 // routing_id. 328 // routing_id.
378 return base::MakeUnique<CopyRequestSwapPromise>( 329 return base::MakeUnique<CopyRequestSwapPromise>(std::move(request));
379 std::move(request),
380 base::Bind(
381 &LayoutTestDependenciesImpl::FindLayerTreeFrameSink,
382 // |this| will still be valid, because its lifetime is tied to
383 // RenderThreadImpl, which outlives layout test execution.
384 base::Unretained(this), routing_id));
385 } 330 }
386 331
387 // TestLayerTreeFrameSinkClient implementation. 332 // TestLayerTreeFrameSinkClient implementation.
388 std::unique_ptr<cc::OutputSurface> CreateDisplayOutputSurface( 333 std::unique_ptr<cc::OutputSurface> CreateDisplayOutputSurface(
389 scoped_refptr<cc::ContextProvider> compositor_context_provider) override { 334 scoped_refptr<cc::ContextProvider> compositor_context_provider) override {
390 // This is for an offscreen context for the compositor. So the default 335 // This is for an offscreen context for the compositor. So the default
391 // framebuffer doesn't need alpha, depth, stencil, antialiasing. 336 // framebuffer doesn't need alpha, depth, stencil, antialiasing.
392 gpu::gles2::ContextCreationAttribHelper attributes; 337 gpu::gles2::ContextCreationAttribHelper attributes;
393 attributes.alpha_size = -1; 338 attributes.alpha_size = -1;
394 attributes.depth_size = 0; 339 attributes.depth_size = 0;
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 } 556 }
612 } 557 }
613 558
614 bool IsNavigationInitiatedByRenderer(const blink::WebURLRequest& request) { 559 bool IsNavigationInitiatedByRenderer(const blink::WebURLRequest& request) {
615 RequestExtraData* extra_data = 560 RequestExtraData* extra_data =
616 static_cast<RequestExtraData*>(request.GetExtraData()); 561 static_cast<RequestExtraData*>(request.GetExtraData());
617 return extra_data && extra_data->navigation_initiated_by_renderer(); 562 return extra_data && extra_data->navigation_initiated_by_renderer();
618 } 563 }
619 564
620 } // namespace content 565 } // namespace content
OLDNEW
« no previous file with comments | « content/shell/test_runner/web_test_delegate.h ('k') | third_party/WebKit/LayoutTests/FlagExpectations/site-per-process » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698