| Index: ui/ozone/platform/drm/gpu/drm_window.h
|
| diff --git a/ui/ozone/platform/drm/gpu/drm_window.h b/ui/ozone/platform/drm/gpu/drm_window.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fa5e5bdbc8c44ed6d5b02c569509f43a5bb6135a
|
| --- /dev/null
|
| +++ b/ui/ozone/platform/drm/gpu/drm_window.h
|
| @@ -0,0 +1,139 @@
|
| +// Copyright 2014 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.
|
| +
|
| +#ifndef UI_OZONE_PLATFORM_DRM_GPU_DRM_WINDOW_H_
|
| +#define UI_OZONE_PLATFORM_DRM_GPU_DRM_WINDOW_H_
|
| +
|
| +#include <vector>
|
| +
|
| +#include "base/timer/timer.h"
|
| +#include "ui/gfx/geometry/point.h"
|
| +#include "ui/gfx/geometry/rect.h"
|
| +#include "ui/gfx/native_widget_types.h"
|
| +#include "ui/gfx/swap_result.h"
|
| +#include "ui/ozone/ozone_export.h"
|
| +#include "ui/ozone/platform/drm/gpu/overlay_plane.h"
|
| +#include "ui/ozone/platform/drm/gpu/page_flip_request.h"
|
| +#include "ui/ozone/public/surface_ozone_egl.h"
|
| +
|
| +class SkBitmap;
|
| +
|
| +namespace gfx {
|
| +class Point;
|
| +class Rect;
|
| +} // namespace gfx
|
| +
|
| +namespace ui {
|
| +
|
| +class DrmBuffer;
|
| +class DrmDeviceManager;
|
| +class HardwareDisplayController;
|
| +struct OverlayCheck_Params;
|
| +class ScanoutBufferGenerator;
|
| +class ScreenManager;
|
| +
|
| +// A delegate of the platform window (DrmWindow) on the GPU process. This is
|
| +// used to keep track of window state changes such that each platform window is
|
| +// correctly associated with a display.
|
| +// A window is associated with the display whose bounds contains the window
|
| +// bounds. If there's no suitable display, the window is disconnected and its
|
| +// contents will not be visible.
|
| +class OZONE_EXPORT DrmWindow {
|
| + public:
|
| + DrmWindow(gfx::AcceleratedWidget widget,
|
| + DrmDeviceManager* device_manager,
|
| + ScreenManager* screen_manager);
|
| +
|
| + ~DrmWindow();
|
| +
|
| + gfx::Rect bounds() const { return bounds_; }
|
| +
|
| + void Initialize();
|
| +
|
| + void Shutdown();
|
| +
|
| + // Returns the accelerated widget associated with the delegate.
|
| + gfx::AcceleratedWidget GetAcceleratedWidget();
|
| +
|
| + // Returns the current controller the window is displaying on. Callers should
|
| + // not cache the result as the controller may change as the window is moved.
|
| + HardwareDisplayController* GetController();
|
| +
|
| + void SetController(HardwareDisplayController* controller);
|
| +
|
| + // Called when the window is resized/moved.
|
| + void OnBoundsChanged(const gfx::Rect& bounds);
|
| +
|
| + // Update the HW cursor bitmap & move to specified location. If
|
| + // the bitmap is empty, the cursor is hidden.
|
| + void SetCursor(const std::vector<SkBitmap>& bitmaps,
|
| + const gfx::Point& location,
|
| + int frame_delay_ms);
|
| +
|
| + // Update the HW cursor bitmap & move to specified location. If
|
| + // the bitmap is empty, the cursor is hidden.
|
| + void SetCursorWithoutAnimations(const std::vector<SkBitmap>& bitmaps,
|
| + const gfx::Point& location);
|
| +
|
| + // Move the HW cursor to the specified location.
|
| + void MoveCursor(const gfx::Point& location);
|
| +
|
| + // Queue overlay planes and page flips.
|
| + // If hardware display controller is available, forward the information
|
| + // immediately, otherwise queue up on the window and forward when the hardware
|
| + // is once again ready.
|
| + void QueueOverlayPlane(const OverlayPlane& plane);
|
| +
|
| + bool SchedulePageFlip(bool is_sync, const SwapCompletionCallback& callback);
|
| + bool TestPageFlip(const std::vector<OverlayCheck_Params>& planes,
|
| + ScanoutBufferGenerator* buffer_generator);
|
| +
|
| + // Returns the last buffer associated with this window.
|
| + const OverlayPlane* GetLastModesetBuffer();
|
| +
|
| + private:
|
| + // Draw the last set cursor & update the cursor plane.
|
| + void ResetCursor(bool bitmap_only);
|
| +
|
| + // Draw next frame in an animated cursor.
|
| + void OnCursorAnimationTimeout();
|
| +
|
| + // When |controller_| changes this is called to reallocate the cursor buffers
|
| + // since the allocation DRM device may have changed.
|
| + void UpdateCursorBuffers();
|
| +
|
| + gfx::AcceleratedWidget widget_;
|
| +
|
| + DrmDeviceManager* device_manager_; // Not owned.
|
| + ScreenManager* screen_manager_; // Not owned.
|
| +
|
| + // The current bounds of the window.
|
| + gfx::Rect bounds_;
|
| +
|
| + // The controller associated with the current window. This may be nullptr if
|
| + // the window isn't over an active display.
|
| + HardwareDisplayController* controller_ = nullptr;
|
| +
|
| + base::RepeatingTimer<DrmWindow> cursor_timer_;
|
| +
|
| + scoped_refptr<DrmBuffer> cursor_buffers_[2];
|
| + int cursor_frontbuffer_ = 0;
|
| +
|
| + std::vector<SkBitmap> cursor_bitmaps_;
|
| + gfx::Point cursor_location_;
|
| + int cursor_frame_ = 0;
|
| + int cursor_frame_delay_ms_ = 0;
|
| +
|
| + // Planes and flips currently being queued in the absence of hardware display
|
| + // controller.
|
| + OverlayPlaneList pending_planes_;
|
| + OverlayPlaneList last_submitted_planes_;
|
| + bool last_swap_sync_ = false;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DrmWindow);
|
| +};
|
| +
|
| +} // namespace ui
|
| +
|
| +#endif // UI_OZONE_PLATFORM_DRM_GPU_DRM_WINDOW_H_
|
|
|