Chromium Code Reviews| Index: ui/ozone/platform/drm/gpu/crtc_controller.cc |
| diff --git a/ui/ozone/platform/drm/gpu/crtc_controller.cc b/ui/ozone/platform/drm/gpu/crtc_controller.cc |
| index ef49295dea71a8bccaa9cdd4da9dbf4fa5b3be6b..1e9cc67504ccfaa11fb383302e4253b5f44f0ed0 100644 |
| --- a/ui/ozone/platform/drm/gpu/crtc_controller.cc |
| +++ b/ui/ozone/platform/drm/gpu/crtc_controller.cc |
| @@ -7,7 +7,7 @@ |
| #include "base/logging.h" |
| #include "base/time/time.h" |
| #include "ui/ozone/platform/drm/gpu/drm_device.h" |
| -#include "ui/ozone/platform/drm/gpu/page_flip_observer.h" |
| +#include "ui/ozone/platform/drm/gpu/page_flip_request.h" |
| #include "ui/ozone/platform/drm/gpu/scanout_buffer.h" |
| namespace ui { |
| @@ -67,14 +67,16 @@ bool CrtcController::Disable() { |
| return drm_->DisableCrtc(crtc_); |
| } |
| -bool CrtcController::SchedulePageFlip(HardwareDisplayPlaneList* plane_list, |
| - const OverlayPlaneList& overlays) { |
| +bool CrtcController::SchedulePageFlip( |
| + HardwareDisplayPlaneList* plane_list, |
| + const OverlayPlaneList& overlays, |
| + scoped_refptr<PageFlipRequest> page_flip_request) { |
| DCHECK(!page_flip_pending_); |
|
dnicoara
2015/04/23 15:34:56
Lets just remove page_flip_pending_ and check agai
|
| DCHECK(!is_disabled_); |
| const OverlayPlane* primary = OverlayPlane::GetPrimaryPlane(overlays); |
| if (!primary) { |
| LOG(ERROR) << "No primary plane to display on crtc " << crtc_; |
| - FOR_EACH_OBSERVER(PageFlipObserver, observers_, OnPageFlipEvent()); |
| + page_flip_request->callback.Run(); |
| return true; |
| } |
| DCHECK(primary->buffer.get()); |
| @@ -84,7 +86,7 @@ bool CrtcController::SchedulePageFlip(HardwareDisplayPlaneList* plane_list, |
| << mode_.hdisplay << "x" << mode_.vdisplay << " got " |
| << primary->buffer->GetSize().ToString() << " for" |
| << " crtc=" << crtc_ << " connector=" << connector_; |
| - FOR_EACH_OBSERVER(PageFlipObserver, observers_, OnPageFlipEvent()); |
| + page_flip_request->callback.Run(); |
| return true; |
| } |
| @@ -96,6 +98,7 @@ bool CrtcController::SchedulePageFlip(HardwareDisplayPlaneList* plane_list, |
| page_flip_pending_ = true; |
| pending_planes_ = overlays; |
| + page_flip_request_ = page_flip_request; |
| return true; |
| } |
| @@ -116,7 +119,9 @@ void CrtcController::OnPageFlipEvent(unsigned int frame, |
| current_planes_.clear(); |
| current_planes_.swap(pending_planes_); |
| - FOR_EACH_OBSERVER(PageFlipObserver, observers_, OnPageFlipEvent()); |
| + scoped_refptr<PageFlipRequest> last_request; |
| + last_request.swap(page_flip_request_); |
| + last_request->callback.Run(); |
| } |
| bool CrtcController::SetCursor(const scoped_refptr<ScanoutBuffer>& buffer) { |
| @@ -131,14 +136,6 @@ bool CrtcController::MoveCursor(const gfx::Point& location) { |
| return drm_->MoveCursor(crtc_, location); |
| } |
| -void CrtcController::AddObserver(PageFlipObserver* observer) { |
| - observers_.AddObserver(observer); |
| -} |
| - |
| -void CrtcController::RemoveObserver(PageFlipObserver* observer) { |
| - observers_.RemoveObserver(observer); |
| -} |
| - |
| bool CrtcController::ResetCursor() { |
| uint32_t handle = 0; |
| gfx::Size size; |