Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Unified Diff: ui/ozone/platform/drm/gpu/drm_device.cc

Issue 1311043016: Switch DRM platform to using a separate thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mv-drm-calls-on-thread2
Patch Set: update & fix clang Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/ozone/platform/drm/gpu/drm_device.h ('k') | ui/ozone/platform/drm/gpu/drm_device_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ba5c539c55bbced4524c7b76a66970e1c0155d07..ad4979c45cb28bd17cfa94cd80a9d8ee8e9656e5 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_;
@@ -251,10 +220,7 @@ DrmDevice::DrmDevice(const base::FilePath& device_path,
page_flip_manager_(new PageFlipManager()),
is_primary_device_(is_primary_device) {}
-DrmDevice::~DrmDevice() {
- if (watcher_)
- watcher_->Shutdown();
-}
+DrmDevice::~DrmDevice() {}
bool DrmDevice::Initialize(bool use_atomic) {
// Ignore devices that cannot perform modesetting.
@@ -279,15 +245,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) {
« no previous file with comments | « ui/ozone/platform/drm/gpu/drm_device.h ('k') | ui/ozone/platform/drm/gpu/drm_device_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698