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

Unified Diff: ui/ozone/platform/drm/gpu/hardware_display_controller.cc

Issue 1084173004: Adding status to swap complete (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: ui/ozone/platform/drm/gpu/hardware_display_controller.cc
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
index f9f08ea1926f5fb6691f12eb7dc5c2b82205053a..305f6fadf68f8e9af7daaee4eace7d1a611fe36f 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
@@ -14,17 +14,22 @@
#include "third_party/skia/include/core/SkCanvas.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/size.h"
+#include "ui/gfx/native_widget_types.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/public/native_pixmap.h"
namespace ui {
+namespace {
+void EmptyPageFlipCallback(int result) {
+}
+} // namespace
HardwareDisplayController::PageFlipRequest::PageFlipRequest(
const OverlayPlaneList& planes,
bool is_sync,
- const base::Closure& callback)
+ const PageFlipCallback& callback)
: planes(planes), is_sync(is_sync), callback(callback) {
}
@@ -56,13 +61,14 @@ bool HardwareDisplayController::Modeset(const OverlayPlane& primary,
mode_ = mode;
current_planes_ = std::vector<OverlayPlane>(1, primary);
+ pending_planes_.clear();
ClearPendingRequests();
// Because a page flip is pending we need to leave some state for the
// callback. We use the modeset state since it is the only valid state.
if (HasPendingPageFlips())
- requests_.push_back(
- PageFlipRequest(current_planes_, false, base::Bind(&base::DoNothing)));
+ requests_.push_back(PageFlipRequest(current_planes_, false,
+ base::Bind(&EmptyPageFlipCallback)));
return status;
}
@@ -70,13 +76,7 @@ bool HardwareDisplayController::Modeset(const OverlayPlane& primary,
bool HardwareDisplayController::Enable() {
TRACE_EVENT0("drm", "HDC::Enable");
DCHECK(!current_planes_.empty());
-
- const OverlayPlane* primary = nullptr;
- // Use the last scheduled buffer to modeset to preserve request order.
- if (!requests_.empty())
- primary = OverlayPlane::GetPrimaryPlane(requests_.back().planes);
- else
- primary = OverlayPlane::GetPrimaryPlane(current_planes_);
+ const OverlayPlane* primary = OverlayPlane::GetPrimaryPlane(current_planes_);
return Modeset(*primary, mode_);
}
@@ -95,12 +95,12 @@ void HardwareDisplayController::QueueOverlayPlane(const OverlayPlane& plane) {
bool HardwareDisplayController::SchedulePageFlip(
bool is_sync,
- const base::Closure& callback) {
+ const PageFlipCallback& callback) {
TRACE_EVENT0("drm", "HDC::SchedulePageFlip");
// Ignore requests with no planes to schedule.
if (pending_planes_.empty()) {
- callback.Run();
+ callback.Run(gfx::SwapAck);
return true;
}
@@ -120,6 +120,10 @@ bool HardwareDisplayController::SchedulePageFlip(
return status;
}
+bool HardwareDisplayController::SchedulePageFlipWithoutCallback(bool is_sync) {
+ return SchedulePageFlip(is_sync, base::Bind(&EmptyPageFlipCallback));
+}
+
bool HardwareDisplayController::SetCursor(
const scoped_refptr<ScanoutBuffer>& buffer) {
bool status = true;
@@ -260,7 +264,7 @@ void HardwareDisplayController::OnPageFlipEvent() {
// Normally the caller would handle the error call, but because we're in a
// delayed schedule the initial SchedulePageFlip() already returned true,
// thus we need to run the callback.
- request.callback.Run();
+ request.callback.Run(gfx::SwapFailed);
}
}
@@ -318,14 +322,14 @@ void HardwareDisplayController::ProcessPageFlipRequest() {
requests_.pop_front();
current_planes_.swap(request.planes);
- request.callback.Run();
+ request.callback.Run(gfx::SwapAck);
}
void HardwareDisplayController::ClearPendingRequests() {
while (!requests_.empty()) {
PageFlipRequest request = requests_.front();
requests_.pop_front();
- request.callback.Run();
+ request.callback.Run(gfx::SwapAck);
}
}

Powered by Google App Engine
This is Rietveld 408576698