diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-04-10 15:06:35 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-04-12 12:42:58 +0000 |
commit | bcf38ab56ac6637ea557ea73e39f5cac319e8fbf (patch) | |
tree | e4b708267a3896f761e50562d5a7e93f9e119081 /src/core | |
parent | d29125ea49a6a7c86ea20a90a1f3fddb9b13d9f4 (diff) |
Avoid context-switches when not switching thread contexts
When UI and GPU threads are the same we not need to do async scheduling
or calls between them, and doing so comes at a much higher cost than
in a multithreaded environment.
Change-Id: Icddee1a78d87ce08362882da5740471dfef1224a
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/compositor/compositor_resource_tracker.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/core/compositor/compositor_resource_tracker.cpp b/src/core/compositor/compositor_resource_tracker.cpp index ba874053e..73242c693 100644 --- a/src/core/compositor/compositor_resource_tracker.cpp +++ b/src/core/compositor/compositor_resource_tracker.cpp @@ -213,6 +213,9 @@ void CompositorResourceTracker::scheduleUpdateMailboxes(std::vector<CompositorRe #if QT_CONFIG(opengl) scoped_refptr<base::SingleThreadTaskRunner> gpuTaskRunner = gpu_task_runner(); DCHECK(gpuTaskRunner); + thread_local bool currentThreadIsGpu = gpuTaskRunner->BelongsToCurrentThread(); + if (currentThreadIsGpu) + return updateMailboxes(std::move(resources)); gpuTaskRunner->PostTask( FROM_HERE, base::BindOnce(&CompositorResourceTracker::updateMailboxes, @@ -243,6 +246,9 @@ void CompositorResourceTracker::updateMailboxes(std::vector<CompositorResource * void CompositorResourceTracker::scheduleRunSubmitCallback() { + thread_local bool currentThreadIsUi = content::BrowserThread::CurrentlyOn(content::BrowserThread::UI); + if (currentThreadIsUi) + return runSubmitCallback(); base::PostTaskWithTraits( FROM_HERE, { content::BrowserThread::UI, base::TaskPriority::USER_VISIBLE }, base::BindOnce(&CompositorResourceTracker::runSubmitCallback, |