| Index: ui/ozone/platform/drm/gpu/drm_device.cc
|
| diff --git a/ui/ozone/platform/drm/gpu/drm_device.cc b/ui/ozone/platform/drm/gpu/drm_device.cc
|
| index 0471e43fcc9a3f32c729b98e6f5bcd8da06ecccb..c3cd97bcb2d5c5ab469f4507b8a8974c830fb7ba 100644
|
| --- a/ui/ozone/platform/drm/gpu/drm_device.cc
|
| +++ b/ui/ozone/platform/drm/gpu/drm_device.cc
|
| @@ -114,10 +114,10 @@ bool CanQueryForResources(int fd) {
|
|
|
| } // namespace
|
|
|
| -class DrmDevice::PageFlipManager
|
| - : public base::RefCountedThreadSafe<DrmDevice::PageFlipManager> {
|
| +class DrmDevice::PageFlipManager {
|
| public:
|
| PageFlipManager() : next_id_(0) {}
|
| + ~PageFlipManager() {}
|
|
|
| void OnPageFlip(uint32_t frame,
|
| uint32_t seconds,
|
| @@ -149,9 +149,6 @@ class DrmDevice::PageFlipManager
|
| }
|
|
|
| private:
|
| - friend class base::RefCountedThreadSafe<DrmDevice::PageFlipManager>;
|
| - ~PageFlipManager() {}
|
| -
|
| struct PageFlip {
|
| uint64_t id;
|
| uint32_t pending_calls;
|
| @@ -173,68 +170,40 @@ class DrmDevice::PageFlipManager
|
| DISALLOW_COPY_AND_ASSIGN(PageFlipManager);
|
| };
|
|
|
| -class DrmDevice::IOWatcher
|
| - : public base::RefCountedThreadSafe<DrmDevice::IOWatcher>,
|
| - public base::MessagePumpLibevent::Watcher {
|
| +class DrmDevice::IOWatcher : public base::MessagePumpLibevent::Watcher {
|
| public:
|
| - IOWatcher(int fd,
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
|
| - const scoped_refptr<DrmDevice::PageFlipManager>& page_flip_manager)
|
| - : main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| - io_task_runner_(io_task_runner),
|
| - page_flip_manager_(page_flip_manager),
|
| - fd_(fd) {
|
| - io_task_runner_->PostTask(FROM_HERE,
|
| - base::Bind(&IOWatcher::RegisterOnIO, this));
|
| + IOWatcher(int fd, DrmDevice::PageFlipManager* page_flip_manager)
|
| + : page_flip_manager_(page_flip_manager), fd_(fd) {
|
| + Register();
|
| }
|
|
|
| - void Shutdown() {
|
| - io_task_runner_->PostTask(FROM_HERE,
|
| - base::Bind(&IOWatcher::UnregisterOnIO, this));
|
| - }
|
| + ~IOWatcher() override { Unregister(); }
|
|
|
| private:
|
| - friend class base::RefCountedThreadSafe<IOWatcher>;
|
| -
|
| - ~IOWatcher() override {}
|
| -
|
| - void RegisterOnIO() {
|
| + void Register() {
|
| DCHECK(base::MessageLoopForIO::IsCurrent());
|
| base::MessageLoopForIO::current()->WatchFileDescriptor(
|
| fd_, true, base::MessageLoopForIO::WATCH_READ, &controller_, this);
|
| }
|
|
|
| - void UnregisterOnIO() {
|
| + void Unregister() {
|
| DCHECK(base::MessageLoopForIO::IsCurrent());
|
| controller_.StopWatchingFileDescriptor();
|
| }
|
|
|
| - void OnPageFlipOnIO(uint32_t frame,
|
| - uint32_t seconds,
|
| - uint32_t useconds,
|
| - uint64_t id) {
|
| - main_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&DrmDevice::PageFlipManager::OnPageFlip, page_flip_manager_,
|
| - frame, seconds, useconds, id));
|
| - }
|
| -
|
| // base::MessagePumpLibevent::Watcher overrides:
|
| void OnFileCanReadWithoutBlocking(int fd) override {
|
| DCHECK(base::MessageLoopForIO::IsCurrent());
|
| TRACE_EVENT1("drm", "OnDrmEvent", "socket", fd);
|
|
|
| - if (!ProcessDrmEvent(
|
| - fd, base::Bind(&DrmDevice::IOWatcher::OnPageFlipOnIO, this)))
|
| - UnregisterOnIO();
|
| + if (!ProcessDrmEvent(fd, base::Bind(&DrmDevice::PageFlipManager::OnPageFlip,
|
| + base::Unretained(page_flip_manager_))))
|
| + Unregister();
|
| }
|
|
|
| void OnFileCanWriteWithoutBlocking(int fd) override { NOTREACHED(); }
|
|
|
| - scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
|
| - scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
|
| -
|
| - scoped_refptr<DrmDevice::PageFlipManager> page_flip_manager_;
|
| + DrmDevice::PageFlipManager* page_flip_manager_;
|
|
|
| base::MessagePumpLibevent::FileDescriptorWatcher controller_;
|
|
|
| @@ -246,13 +215,9 @@ class DrmDevice::IOWatcher
|
| DrmDevice::DrmDevice(const base::FilePath& device_path, base::File file)
|
| : device_path_(device_path),
|
| file_(file.Pass()),
|
| - page_flip_manager_(new PageFlipManager()) {
|
| -}
|
| + page_flip_manager_(new PageFlipManager()) {}
|
|
|
| -DrmDevice::~DrmDevice() {
|
| - if (watcher_)
|
| - watcher_->Shutdown();
|
| -}
|
| +DrmDevice::~DrmDevice() {}
|
|
|
| bool DrmDevice::Initialize(bool use_atomic) {
|
| // Ignore devices that cannot perform modesetting.
|
| @@ -277,15 +242,10 @@ bool DrmDevice::Initialize(bool use_atomic) {
|
| return false;
|
| }
|
|
|
| - return true;
|
| -}
|
| + watcher_.reset(
|
| + new IOWatcher(file_.GetPlatformFile(), page_flip_manager_.get()));
|
|
|
| -void DrmDevice::InitializeTaskRunner(
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
|
| - DCHECK(!task_runner_);
|
| - task_runner_ = task_runner;
|
| - watcher_ =
|
| - new IOWatcher(file_.GetPlatformFile(), task_runner_, page_flip_manager_);
|
| + return true;
|
| }
|
|
|
| ScopedDrmCrtcPtr DrmDevice::GetCrtc(uint32_t crtc_id) {
|
|
|