blob: e9401ec25c1f3a01dd035042cef01a695cc91b72 [file] [log] [blame]
// Copyright 2016 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/output/overlay_strategy_fullscreen.h"
#include "cc/base/math_util.h"
#include "cc/output/overlay_candidate_validator.h"
#include "cc/quads/draw_quad.h"
#include "cc/quads/solid_color_draw_quad.h"
#include "ui/gfx/geometry/rect_conversions.h"
#include "ui/gfx/geometry/size_conversions.h"
namespace cc {
OverlayStrategyFullscreen::OverlayStrategyFullscreen(
OverlayCandidateValidator* capability_checker)
: capability_checker_(capability_checker) {
DCHECK(capability_checker);
}
OverlayStrategyFullscreen::~OverlayStrategyFullscreen() {}
bool OverlayStrategyFullscreen::Attempt(
ResourceProvider* resource_provider,
RenderPass* render_pass,
OverlayCandidateList* candidate_list,
std::vector<gfx::Rect>* content_bounds) {
QuadList* quad_list = &render_pass->quad_list;
// First quad of quad_list is the top most quad.
auto front = quad_list->begin();
while (front != quad_list->end()) {
if (!OverlayCandidate::IsInvisibleQuad(*front))
break;
front++;
}
if (front == quad_list->end())
return false;
const DrawQuad* quad = *front;
if (quad->ShouldDrawWithBlending())
return false;
OverlayCandidate candidate;
if (!OverlayCandidate::FromDrawQuad(resource_provider, quad, &candidate)) {
return false;
}
if (!candidate.display_rect.origin().IsOrigin() ||
gfx::ToRoundedSize(candidate.display_rect.size()) !=
render_pass->output_rect.size() ||
render_pass->output_rect.size() != candidate.resource_size_in_pixels) {
return false;
}
candidate.plane_z_order = 0;
candidate.overlay_handled = true;
OverlayCandidateList new_candidate_list;
new_candidate_list.push_back(candidate);
capability_checker_->CheckOverlaySupport(&new_candidate_list);
if (!new_candidate_list.front().overlay_handled)
return false;
candidate_list->swap(new_candidate_list);
render_pass->quad_list = QuadList(); // Remove all the quads
return true;
}
} // namespace cc