| Index: ui/ozone/platform/drm/gpu/drm_window.cc
|
| diff --git a/ui/ozone/platform/drm/gpu/drm_window.cc b/ui/ozone/platform/drm/gpu/drm_window.cc
|
| index 29c9a8a58b54dd5748846260f219925aa33484f8..c553c0b81df5450710a38154b7d52942160335ab 100644
|
| --- a/ui/ozone/platform/drm/gpu/drm_window.cc
|
| +++ b/ui/ozone/platform/drm/gpu/drm_window.cc
|
| @@ -4,20 +4,16 @@
|
|
|
| #include "ui/ozone/platform/drm/gpu/drm_window.h"
|
|
|
| -#include <drm_fourcc.h>
|
| -
|
| #include "base/time/time.h"
|
| #include "base/trace_event/trace_event.h"
|
| #include "third_party/skia/include/core/SkBitmap.h"
|
| #include "third_party/skia/include/core/SkDevice.h"
|
| #include "third_party/skia/include/core/SkSurface.h"
|
| -#include "ui/ozone/common/gpu/ozone_gpu_message_params.h"
|
| -#include "ui/ozone/platform/drm/common/drm_util.h"
|
| #include "ui/ozone/platform/drm/gpu/crtc_controller.h"
|
| #include "ui/ozone/platform/drm/gpu/drm_buffer.h"
|
| #include "ui/ozone/platform/drm/gpu/drm_device.h"
|
| #include "ui/ozone/platform/drm/gpu/drm_device_manager.h"
|
| -#include "ui/ozone/platform/drm/gpu/scanout_buffer.h"
|
| +#include "ui/ozone/platform/drm/gpu/drm_overlay_candidate.h"
|
| #include "ui/ozone/platform/drm/gpu/screen_manager.h"
|
|
|
| namespace ui {
|
| @@ -64,6 +60,7 @@ void DrmWindow::Initialize() {
|
| TRACE_EVENT1("drm", "DrmWindow::Initialize", "widget", widget_);
|
|
|
| device_manager_->UpdateDrmDevice(widget_, nullptr);
|
| + overlay_validator_ = make_scoped_ptr(new DrmOverlayCandidate(this));
|
| }
|
|
|
| void DrmWindow::Shutdown() {
|
| @@ -141,66 +138,12 @@ void DrmWindow::SchedulePageFlip(const std::vector<OverlayPlane>& planes,
|
| }
|
|
|
| std::vector<OverlayCheck_Params> DrmWindow::TestPageFlip(
|
| - const std::vector<OverlayCheck_Params>& overlays,
|
| + const std::vector<OverlayCheck_Params>& current_combination,
|
| + const std::vector<OverlayCheck_Params>& new_combination,
|
| ScanoutBufferGenerator* buffer_generator) {
|
| - std::vector<OverlayCheck_Params> params;
|
| - if (!controller_) {
|
| - // Nothing much we can do here.
|
| - return params;
|
| - }
|
| -
|
| - OverlayPlaneList compatible_test_list;
|
| - scoped_refptr<DrmDevice> drm = controller_->GetAllocationDrmDevice();
|
| - for (const auto& overlay : overlays) {
|
| - OverlayCheck_Params overlay_params(overlay);
|
| - gfx::Size size =
|
| - (overlay.plane_z_order == 0) ? bounds().size() : overlay.buffer_size;
|
| - scoped_refptr<ScanoutBuffer> buffer;
|
| - // Check if we can re-use existing buffers.
|
| - for (const auto& plane : last_submitted_planes_) {
|
| - uint32_t format = GetFourCCFormatFromBufferFormat(overlay.format);
|
| - // We always use a storage type of XRGB, even if the pixel format
|
| - // is ARGB.
|
| - if (format == DRM_FORMAT_ARGB8888)
|
| - format = DRM_FORMAT_XRGB8888;
|
| -
|
| - if (plane.buffer->GetFramebufferPixelFormat() == format &&
|
| - plane.z_order == overlay.plane_z_order &&
|
| - plane.display_bounds == overlay.display_rect &&
|
| - plane.buffer->GetSize() == size) {
|
| - buffer = plane.buffer;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - if (!buffer)
|
| - buffer = buffer_generator->Create(drm, overlay.format, size);
|
| -
|
| - if (!buffer)
|
| - continue;
|
| -
|
| - OverlayPlane plane(buffer, overlay.plane_z_order, overlay.transform,
|
| - overlay.display_rect, overlay.crop_rect);
|
| -
|
| - // Buffer for Primary plane should always be present for compatibility test.
|
| - if (!compatible_test_list.size() && overlay.plane_z_order != 0) {
|
| - compatible_test_list.push_back(
|
| - *OverlayPlane::GetPrimaryPlane(last_submitted_planes_));
|
| - }
|
| -
|
| - compatible_test_list.push_back(plane);
|
| -
|
| - if (controller_->TestPageFlip(compatible_test_list)) {
|
| - overlay_params.plane_ids =
|
| - controller_->GetCompatibleHardwarePlaneIds(plane);
|
| - params.push_back(overlay_params);
|
| - }
|
| -
|
| - if (compatible_test_list.size() > 1)
|
| - compatible_test_list.pop_back();
|
| - }
|
| -
|
| - return params;
|
| + return overlay_validator_->TestPageFlip(current_combination, new_combination,
|
| + last_submitted_planes_,
|
| + buffer_generator);
|
| }
|
|
|
| const OverlayPlane* DrmWindow::GetLastModesetBuffer() {
|
| @@ -229,6 +172,11 @@ void DrmWindow::GetVSyncParameters(
|
| callback.Run(timebase, interval);
|
| }
|
|
|
| +void DrmWindow::GetOverlayBufferConfigurations(
|
| + const OverlayParamCallback& callback) const {
|
| + callback.Run(overlay_validator_->GetOverlayConfigurations());
|
| +}
|
| +
|
| void DrmWindow::ResetCursor(bool bitmap_only) {
|
| if (!controller_)
|
| return;
|
|
|