blob: 87530ae12dbe03dbff6b77a67c566157aef7d937 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 ZIRCON_SYSTEM_DEV_DISPLAY_DISPLAY_TEST_FIDL_CLIENT_H_
#define ZIRCON_SYSTEM_DEV_DISPLAY_DISPLAY_TEST_FIDL_CLIENT_H_
#include <fuchsia/hardware/display/llcpp/fidl.h>
#include <lib/fidl/cpp/message.h>
#include <lib/zircon-internal/thread_annotations.h>
#include <zircon/pixelformat.h>
#include <zircon/types.h>
#include <memory>
#include <fbl/mutex.h>
#include "base.h"
namespace display {
class TestFidlClient {
public:
class Display {
public:
Display(const ::llcpp::fuchsia::hardware::display::Info& info);
uint64_t id_;
fbl::Vector<zx_pixel_format_t> pixel_formats_;
fbl::Vector<::llcpp::fuchsia::hardware::display::Mode> modes_;
fbl::Vector<::llcpp::fuchsia::hardware::display::CursorInfo> cursors_;
fbl::String manufacturer_name_;
fbl::String monitor_name_;
fbl::String monitor_serial_;
::llcpp::fuchsia::hardware::display::ImageConfig image_config_;
};
TestFidlClient() {}
~TestFidlClient();
bool CreateChannel(zx_handle_t provider, bool is_vc);
// Enable vsync for a display and wait for events using |dispatcher|.
bool Bind(async_dispatcher_t* dispatcher) TA_EXCL(mtx());
uint64_t display_id() const;
fbl::Vector<Display> displays_;
std::unique_ptr<::llcpp::fuchsia::hardware::display::Controller::SyncClient> dc_
TA_GUARDED(mtx());
zx::handle device_handle_;
bool has_ownership_ = false;
size_t vsync_count_ TA_GUARDED(mtx()) = 0;
fbl::Mutex* mtx() const { return &mtx_; }
private:
mutable fbl::Mutex mtx_;
async_dispatcher_t* dispatcher_ = nullptr;
void OnEventMsgAsync(async_dispatcher_t* dispatcher, async::WaitBase* self, zx_status_t status,
const zx_packet_signal_t* signal) TA_EXCL(mtx());
async::WaitMethod<TestFidlClient, &TestFidlClient::OnEventMsgAsync> wait_events_{this};
};
} // namespace display
#endif // ZIRCON_SYSTEM_DEV_DISPLAY_DISPLAY_TEST_FIDL_CLIENT_H_