blob: 2797c2b25a5dd8f849bb8f8516feb206450973e8 [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.
#ifndef UI_OZONE_PLATFORM_DRM_HOST_DRM_OVERLAY_CANDIDATES_HOST_H_
#define UI_OZONE_PLATFORM_DRM_HOST_DRM_OVERLAY_CANDIDATES_HOST_H_
#include <stdint.h>
#include <deque>
#include <map>
#include <vector>
#include "base/containers/mru_cache.h"
#include "base/macros.h"
#include "ui/ozone/platform/drm/host/gpu_thread_adapter.h"
#include "ui/ozone/platform/drm/host/gpu_thread_observer.h"
#include "ui/ozone/public/overlay_candidates_ozone.h"
namespace ui {
class DrmOverlayManager;
// This is an implementation of OverlayCandidatesOzone where the driver is asked
// about overlay capabilities via IPC. We have no way of querying abstract
// capabilities, only if a particular configuration is supported or not.
// Each time we we are asked if a particular configuration is supported, if we
// have not seen that configuration before, it is IPCed to the GPU via
// OzoneGpuMsg_CheckOverlayCapabilities; a test commit is then performed and
// the result is returned in OzoneHostMsg_OverlayCapabilitiesReceived. Testing
// is asynchronous, until the reply arrives that configuration will be failed.
//
// All OverlayCandidatesOzone objects share a single cache of tested
// configurations stored in the overlay manager.
class DrmOverlayCandidatesHost : public OverlayCandidatesOzone {
public:
DrmOverlayCandidatesHost(DrmOverlayManager* manager_core,
gfx::AcceleratedWidget widget);
~DrmOverlayCandidatesHost() override;
void CheckOverlaySupport(OverlaySurfaceCandidateList* candidates) override;
private:
DrmOverlayManager* overlay_manager_; // Not owned.
gfx::AcceleratedWidget widget_;
DISALLOW_COPY_AND_ASSIGN(DrmOverlayCandidatesHost);
};
} // namespace ui
#endif // UI_OZONE_PLATFORM_DRM_HOST_DRM_OVERLAY_CANDIDATES_HOST_H_