| Index: services/ui/ws/frame_generator.cc
|
| diff --git a/services/ui/ws/frame_generator.cc b/services/ui/ws/frame_generator.cc
|
| index d09b0d7288ec6a725dd308c46025b4c29fbbc4a7..089882901304e4d1991507eb7cde96bfa0fbb578 100644
|
| --- a/services/ui/ws/frame_generator.cc
|
| +++ b/services/ui/ws/frame_generator.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/containers/adapters.h"
|
| #include "cc/output/compositor_frame.h"
|
| #include "cc/quads/render_pass.h"
|
| +#include "cc/quads/render_pass_draw_quad.h"
|
| #include "cc/quads/shared_quad_state.h"
|
| #include "cc/quads/surface_draw_quad.h"
|
| #include "services/ui/surfaces/display_compositor.h"
|
| @@ -26,7 +27,9 @@ FrameGenerator::FrameGenerator(FrameGeneratorDelegate* delegate,
|
| gpu_state_(gpu_state),
|
| surfaces_state_(surfaces_state),
|
| draw_timer_(false, false),
|
| - weak_factory_(this) {}
|
| + weak_factory_(this) {
|
| + DCHECK(delegate_);
|
| +}
|
|
|
| FrameGenerator::~FrameGenerator() {
|
| // Invalidate WeakPtrs now to avoid callbacks back into the
|
| @@ -90,8 +93,10 @@ void FrameGenerator::DidDraw(cc::SurfaceDrawStatus status) {
|
| cc::CompositorFrame FrameGenerator::GenerateCompositorFrame() {
|
| const ViewportMetrics& metrics = delegate_->GetViewportMetrics();
|
| std::unique_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create();
|
| - render_pass->damage_rect = dirty_rect_;
|
| - render_pass->output_rect = gfx::Rect(metrics.size_in_pixels);
|
| + gfx::Rect output_rect(metrics.size_in_pixels);
|
| + dirty_rect_.Intersect(output_rect);
|
| + render_pass->SetNew(cc::RenderPassId(1, 1), output_rect, dirty_rect_,
|
| + gfx::Transform());
|
|
|
| DrawWindowTree(render_pass.get(), delegate_->GetRootWindow(), gfx::Vector2d(),
|
| 1.0f);
|
| @@ -99,6 +104,26 @@ cc::CompositorFrame FrameGenerator::GenerateCompositorFrame() {
|
| std::unique_ptr<cc::DelegatedFrameData> frame_data(
|
| new cc::DelegatedFrameData);
|
| frame_data->render_pass_list.push_back(std::move(render_pass));
|
| + if (delegate_->IsInHighContrastMode()) {
|
| + std::unique_ptr<cc::RenderPass> invert_pass = cc::RenderPass::Create();
|
| + invert_pass->damage_rect = dirty_rect_;
|
| + invert_pass->output_rect = gfx::Rect(metrics.size_in_pixels);
|
| + ServerWindow* root = delegate_->GetRootWindow();
|
| + cc::SharedQuadState* shared_state =
|
| + invert_pass->CreateAndAppendSharedQuadState();
|
| + shared_state->SetAll(gfx::Transform(), root->bounds().size(),
|
| + root->bounds(), root->bounds(), false, 1.f,
|
| + SkXfermode::kSrcOver_Mode, 0);
|
| + auto* quad = invert_pass->CreateAndAppendDrawQuad<cc::RenderPassDrawQuad>();
|
| + cc::FilterOperations filters;
|
| + filters.Append(cc::FilterOperation::CreateInvertFilter(1.0));
|
| + quad->SetNew(shared_state, root->bounds(), root->bounds(),
|
| + cc::RenderPassId(1, 1),
|
| + 0, // mask_resource_id
|
| + gfx::Vector2dF(), gfx::Size(), filters, gfx::Vector2dF(),
|
| + cc::FilterOperations());
|
| + frame_data->render_pass_list.push_back(std::move(invert_pass));
|
| + }
|
|
|
| cc::CompositorFrame frame;
|
| frame.delegated_frame_data = std::move(frame_data);
|
|
|