blob: 947c15a22172034624a0f7ee907bde8cf08e0517 [file] [log] [blame]
// 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_DRI_TEST_MOCK_DRI_WRAPPER_H_
#define UI_OZONE_PLATFORM_DRI_TEST_MOCK_DRI_WRAPPER_H_
#include <queue>
#include <vector>
#include "skia/ext/refptr.h"
#include "third_party/skia/include/core/SkSurface.h"
#include "ui/ozone/platform/dri/dri_wrapper.h"
namespace ui {
class CrtcController;
// The real DriWrapper makes actual DRM calls which we can't use in unit tests.
class MockDriWrapper : public ui::DriWrapper {
public:
MockDriWrapper(int fd);
~MockDriWrapper() override;
int get_get_crtc_call_count() const { return get_crtc_call_count_; }
int get_set_crtc_call_count() const { return set_crtc_call_count_; }
int get_restore_crtc_call_count() const { return restore_crtc_call_count_; }
int get_add_framebuffer_call_count() const {
return add_framebuffer_call_count_;
}
int get_remove_framebuffer_call_count() const {
return remove_framebuffer_call_count_;
}
int get_page_flip_call_count() const { return page_flip_call_count_; }
int get_overlay_flip_call_count() const { return overlay_flip_call_count_; }
int get_handle_events_count() const { return handle_events_count_; }
void fail_init() { fd_ = -1; }
void set_set_crtc_expectation(bool state) { set_crtc_expectation_ = state; }
void set_page_flip_expectation(bool state) { page_flip_expectation_ = state; }
void set_add_framebuffer_expectation(bool state) {
add_framebuffer_expectation_ = state;
}
void set_create_dumb_buffer_expectation(bool state) {
create_dumb_buffer_expectation_ = state;
}
uint32_t current_framebuffer() const { return current_framebuffer_; }
const std::vector<skia::RefPtr<SkSurface> > buffers() const {
return buffers_;
}
// Overwrite the list of controllers used when serving the PageFlip requests.
void set_controllers(const std::queue<CrtcController*>& controllers) {
controllers_ = controllers;
}
// DriWrapper:
ScopedDrmCrtcPtr GetCrtc(uint32_t crtc_id) override;
bool SetCrtc(uint32_t crtc_id,
uint32_t framebuffer,
std::vector<uint32_t> connectors,
drmModeModeInfo* mode) override;
bool SetCrtc(drmModeCrtc* crtc, std::vector<uint32_t> connectors) override;
ScopedDrmConnectorPtr GetConnector(uint32_t connector_id) override;
bool AddFramebuffer(uint32_t width,
uint32_t height,
uint8_t depth,
uint8_t bpp,
uint32_t stride,
uint32_t handle,
uint32_t* framebuffer) override;
bool RemoveFramebuffer(uint32_t framebuffer) override;
bool PageFlip(uint32_t crtc_id, uint32_t framebuffer, void* data) override;
bool PageFlipOverlay(uint32_t crtc_id,
uint32_t framebuffer,
const gfx::Rect& location,
const gfx::RectF& source,
int overlay_plane) override;
ScopedDrmPropertyPtr GetProperty(drmModeConnector* connector,
const char* name) override;
bool SetProperty(uint32_t connector_id,
uint32_t property_id,
uint64_t value) override;
bool GetCapability(uint64_t capability, uint64_t* value) override;
ScopedDrmPropertyBlobPtr GetPropertyBlob(drmModeConnector* connector,
const char* name) override;
bool SetCursor(uint32_t crtc_id,
uint32_t handle,
const gfx::Size& size) override;
bool MoveCursor(uint32_t crtc_id, const gfx::Point& point) override;
void HandleEvent(drmEventContext& event) override;
bool CreateDumbBuffer(const SkImageInfo& info,
uint32_t* handle,
uint32_t* stride,
void** pixels) override;
void DestroyDumbBuffer(const SkImageInfo& info,
uint32_t handle,
uint32_t stride,
void* pixels) override;
private:
int get_crtc_call_count_;
int set_crtc_call_count_;
int restore_crtc_call_count_;
int add_framebuffer_call_count_;
int remove_framebuffer_call_count_;
int page_flip_call_count_;
int overlay_flip_call_count_;
int handle_events_count_;
bool set_crtc_expectation_;
bool add_framebuffer_expectation_;
bool page_flip_expectation_;
bool create_dumb_buffer_expectation_;
uint32_t current_framebuffer_;
std::vector<skia::RefPtr<SkSurface> > buffers_;
std::queue<CrtcController*> controllers_;
DISALLOW_COPY_AND_ASSIGN(MockDriWrapper);
};
} // namespace ui
#endif // UI_OZONE_PLATFORM_DRI_TEST_MOCK_DRI_WRAPPER_H_