gpu: Cleanup callback types (part 3).
Remove usage of deprecated base::Bind, base::Callback, base::Closure, base::CancelableCallback and base::CancelableClosure types from gpu/* services/ws/public/gpu/* and ui/gl/*. Where possible convert to the corresponding once type. Otherwise replace with the repeating type which is equivalent to the deprecated type. Bug: 714018 Change-Id: If1bf4a30616d746e3c422fdb2644e48798896336 Reviewed-on: https://chromium-review.googlesource.com/c/1450537 Reviewed-by: Jonathan Backer <backer@chromium.org> Commit-Queue: kylechar <kylechar@chromium.org> Cr-Commit-Position: refs/heads/master@{#628856}
This commit is contained in:
gpu
services/ws/public/cpp/gpu
ui/gl
@@ -53,7 +53,7 @@ class GPUTracerTester : public GPUTracer {
|
|||||||
public:
|
public:
|
||||||
explicit GPUTracerTester(GLES2Decoder* decoder)
|
explicit GPUTracerTester(GLES2Decoder* decoder)
|
||||||
: GPUTracer(decoder), tracing_enabled_(0) {
|
: GPUTracer(decoder), tracing_enabled_(0) {
|
||||||
gpu_timing_client_->SetCpuTimeForTesting(base::Bind(&FakeCpuTime));
|
gpu_timing_client_->SetCpuTimeForTesting(base::BindRepeating(&FakeCpuTime));
|
||||||
|
|
||||||
// Force tracing to be dependent on our mock variable here.
|
// Force tracing to be dependent on our mock variable here.
|
||||||
gpu_trace_srv_category = &tracing_enabled_;
|
gpu_trace_srv_category = &tracing_enabled_;
|
||||||
@@ -100,7 +100,7 @@ class BaseGpuTest : public GpuServiceTest {
|
|||||||
gl_fake_queries_.ExpectNoDisjointCalls(*gl_);
|
gl_fake_queries_.ExpectNoDisjointCalls(*gl_);
|
||||||
|
|
||||||
gpu_timing_client_ = GetGLContext()->CreateGPUTimingClient();
|
gpu_timing_client_ = GetGLContext()->CreateGPUTimingClient();
|
||||||
gpu_timing_client_->SetCpuTimeForTesting(base::Bind(&FakeCpuTime));
|
gpu_timing_client_->SetCpuTimeForTesting(base::BindRepeating(&FakeCpuTime));
|
||||||
gl_fake_queries_.Reset();
|
gl_fake_queries_.Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -562,7 +562,7 @@ TEST_F(QueryManagerTest, TimeElapsedQuery) {
|
|||||||
const base::subtle::Atomic32 kSubmitCount = 123;
|
const base::subtle::Atomic32 kSubmitCount = 123;
|
||||||
gl::GPUTimingFake fake_timing_queries;
|
gl::GPUTimingFake fake_timing_queries;
|
||||||
decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting(
|
decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting(
|
||||||
base::Bind(&gl::GPUTimingFake::GetFakeCPUTime));
|
base::BindRepeating(&gl::GPUTimingFake::GetFakeCPUTime));
|
||||||
|
|
||||||
QueryManager::Query* query = CreateQuery(
|
QueryManager::Query* query = CreateQuery(
|
||||||
kTarget, kClient1Id, shared_memory_id_, kSharedMemoryOffset, 0);
|
kTarget, kClient1Id, shared_memory_id_, kSharedMemoryOffset, 0);
|
||||||
@@ -594,7 +594,7 @@ TEST_F(QueryManagerTest, TimeElapsedPauseResume) {
|
|||||||
const base::subtle::Atomic32 kSubmitCount = 123;
|
const base::subtle::Atomic32 kSubmitCount = 123;
|
||||||
gl::GPUTimingFake fake_timing_queries;
|
gl::GPUTimingFake fake_timing_queries;
|
||||||
decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting(
|
decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting(
|
||||||
base::Bind(&gl::GPUTimingFake::GetFakeCPUTime));
|
base::BindRepeating(&gl::GPUTimingFake::GetFakeCPUTime));
|
||||||
|
|
||||||
QueryManager::Query* query = CreateQuery(
|
QueryManager::Query* query = CreateQuery(
|
||||||
kTarget, kClient1Id, shared_memory_id_, kSharedMemoryOffset, 0);
|
kTarget, kClient1Id, shared_memory_id_, kSharedMemoryOffset, 0);
|
||||||
@@ -699,7 +699,7 @@ TEST_F(QueryManagerTest, TimeStampQuery) {
|
|||||||
gl::GPUTimingFake fake_timing_queries;
|
gl::GPUTimingFake fake_timing_queries;
|
||||||
|
|
||||||
decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting(
|
decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting(
|
||||||
base::Bind(&gl::GPUTimingFake::GetFakeCPUTime));
|
base::BindRepeating(&gl::GPUTimingFake::GetFakeCPUTime));
|
||||||
|
|
||||||
QueryManager::Query* query = CreateQuery(
|
QueryManager::Query* query = CreateQuery(
|
||||||
kTarget, kClient1Id, shared_memory_id_, kSharedMemoryOffset, 0);
|
kTarget, kClient1Id, shared_memory_id_, kSharedMemoryOffset, 0);
|
||||||
@@ -726,7 +726,7 @@ TEST_F(QueryManagerTest, TimeStampQueryPending) {
|
|||||||
gl::GPUTimingFake fake_timing_queries;
|
gl::GPUTimingFake fake_timing_queries;
|
||||||
|
|
||||||
decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting(
|
decoder_->GetGLContext()->CreateGPUTimingClient()->SetCpuTimeForTesting(
|
||||||
base::Bind(&gl::GPUTimingFake::GetFakeCPUTime));
|
base::BindRepeating(&gl::GPUTimingFake::GetFakeCPUTime));
|
||||||
|
|
||||||
QueryManager::Query* query = CreateQuery(
|
QueryManager::Query* query = CreateQuery(
|
||||||
kTarget, kClient1Id, shared_memory_id_, kSharedMemoryOffset, 0);
|
kTarget, kClient1Id, shared_memory_id_, kSharedMemoryOffset, 0);
|
||||||
|
@@ -263,8 +263,8 @@ int ShaderDiskCacheEntry::WriteCallback(int rv) {
|
|||||||
op_type_ = WRITE_DATA;
|
op_type_ = WRITE_DATA;
|
||||||
auto io_buf = base::MakeRefCounted<net::StringIOBuffer>(shader_);
|
auto io_buf = base::MakeRefCounted<net::StringIOBuffer>(shader_);
|
||||||
return entry_->WriteData(1, 0, io_buf.get(), shader_.length(),
|
return entry_->WriteData(1, 0, io_buf.get(), shader_.length(),
|
||||||
base::Bind(&ShaderDiskCacheEntry::OnOpComplete,
|
base::BindOnce(&ShaderDiskCacheEntry::OnOpComplete,
|
||||||
weak_ptr_factory_.GetWeakPtr()),
|
weak_ptr_factory_.GetWeakPtr()),
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,8 +357,8 @@ int ShaderDiskReadHelper::OpenNextEntryComplete(int rv) {
|
|||||||
op_type_ = READ_COMPLETE;
|
op_type_ = READ_COMPLETE;
|
||||||
buf_ = base::MakeRefCounted<net::IOBufferWithSize>(entry_->GetDataSize(1));
|
buf_ = base::MakeRefCounted<net::IOBufferWithSize>(entry_->GetDataSize(1));
|
||||||
return entry_->ReadData(1, 0, buf_.get(), buf_->size(),
|
return entry_->ReadData(1, 0, buf_.get(), buf_->size(),
|
||||||
base::Bind(&ShaderDiskReadHelper::OnOpComplete,
|
base::BindOnce(&ShaderDiskReadHelper::OnOpComplete,
|
||||||
weak_ptr_factory_.GetWeakPtr()));
|
weak_ptr_factory_.GetWeakPtr()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ShaderDiskReadHelper::ReadComplete(int rv) {
|
int ShaderDiskReadHelper::ReadComplete(int rv) {
|
||||||
@@ -416,14 +416,15 @@ void ShaderClearHelper::DoClearShaderCache(int rv) {
|
|||||||
switch (op_type_) {
|
switch (op_type_) {
|
||||||
case VERIFY_CACHE_SETUP:
|
case VERIFY_CACHE_SETUP:
|
||||||
rv = cache_->SetAvailableCallback(
|
rv = cache_->SetAvailableCallback(
|
||||||
base::Bind(&ShaderClearHelper::DoClearShaderCache,
|
base::BindRepeating(&ShaderClearHelper::DoClearShaderCache,
|
||||||
weak_ptr_factory_.GetWeakPtr()));
|
weak_ptr_factory_.GetWeakPtr()));
|
||||||
op_type_ = DELETE_CACHE;
|
op_type_ = DELETE_CACHE;
|
||||||
break;
|
break;
|
||||||
case DELETE_CACHE:
|
case DELETE_CACHE:
|
||||||
rv = cache_->Clear(delete_begin_, delete_end_,
|
rv = cache_->Clear(
|
||||||
base::Bind(&ShaderClearHelper::DoClearShaderCache,
|
delete_begin_, delete_end_,
|
||||||
weak_ptr_factory_.GetWeakPtr()));
|
base::BindRepeating(&ShaderClearHelper::DoClearShaderCache,
|
||||||
|
weak_ptr_factory_.GetWeakPtr()));
|
||||||
op_type_ = TERMINATE;
|
op_type_ = TERMINATE;
|
||||||
break;
|
break;
|
||||||
case TERMINATE:
|
case TERMINATE:
|
||||||
@@ -575,7 +576,7 @@ void ShaderDiskCache::Init() {
|
|||||||
int rv = disk_cache::CreateCacheBackend(
|
int rv = disk_cache::CreateCacheBackend(
|
||||||
net::SHADER_CACHE, net::CACHE_BACKEND_DEFAULT,
|
net::SHADER_CACHE, net::CACHE_BACKEND_DEFAULT,
|
||||||
cache_path_.Append(kGpuCachePath), CacheSizeBytes(), true, nullptr,
|
cache_path_.Append(kGpuCachePath), CacheSizeBytes(), true, nullptr,
|
||||||
&backend_, base::Bind(&ShaderDiskCache::CacheCreatedCallback, this));
|
&backend_, base::BindOnce(&ShaderDiskCache::CacheCreatedCallback, this));
|
||||||
|
|
||||||
if (rv == net::OK)
|
if (rv == net::OK)
|
||||||
cache_available_ = true;
|
cache_available_ = true;
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#include "services/ws/public/cpp/gpu/client_gpu_memory_buffer_manager.h"
|
#include "services/ws/public/cpp/gpu/client_gpu_memory_buffer_manager.h"
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
#include "base/memory/shared_memory.h"
|
#include "base/memory/shared_memory.h"
|
||||||
@@ -17,21 +19,15 @@
|
|||||||
#include "services/ws/public/mojom/constants.mojom.h"
|
#include "services/ws/public/mojom/constants.mojom.h"
|
||||||
#include "ui/gfx/buffer_format_util.h"
|
#include "ui/gfx/buffer_format_util.h"
|
||||||
|
|
||||||
using DestructionCallback = base::Callback<void(const gpu::SyncToken& sync)>;
|
|
||||||
|
|
||||||
namespace gpu {
|
|
||||||
class GpuMemoryBufferSupport;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace ws {
|
namespace ws {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void NotifyDestructionOnCorrectThread(
|
void NotifyDestructionOnCorrectThread(
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
||||||
const DestructionCallback& callback,
|
gpu::GpuMemoryBufferImpl::DestructionCallback callback,
|
||||||
const gpu::SyncToken& sync_token) {
|
const gpu::SyncToken& sync_token) {
|
||||||
task_runner->PostTask(FROM_HERE, base::Bind(callback, sync_token));
|
task_runner->PostTask(FROM_HERE,
|
||||||
|
base::BindOnce(std::move(callback), sync_token));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
@@ -46,15 +42,14 @@ ClientGpuMemoryBufferManager::ClientGpuMemoryBufferManager(
|
|||||||
// The thread is owned by this object. Which means the task will not run if
|
// The thread is owned by this object. Which means the task will not run if
|
||||||
// the object has been destroyed. So Unretained() is safe.
|
// the object has been destroyed. So Unretained() is safe.
|
||||||
thread_.task_runner()->PostTask(
|
thread_.task_runner()->PostTask(
|
||||||
FROM_HERE,
|
FROM_HERE, base::BindOnce(&ClientGpuMemoryBufferManager::InitThread,
|
||||||
base::Bind(&ClientGpuMemoryBufferManager::InitThread,
|
base::Unretained(this), gpu.PassInterface()));
|
||||||
base::Unretained(this), base::Passed(gpu.PassInterface())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientGpuMemoryBufferManager::~ClientGpuMemoryBufferManager() {
|
ClientGpuMemoryBufferManager::~ClientGpuMemoryBufferManager() {
|
||||||
thread_.task_runner()->PostTask(
|
thread_.task_runner()->PostTask(
|
||||||
FROM_HERE, base::Bind(&ClientGpuMemoryBufferManager::TearDownThread,
|
FROM_HERE, base::BindOnce(&ClientGpuMemoryBufferManager::TearDownThread,
|
||||||
base::Unretained(this)));
|
base::Unretained(this)));
|
||||||
thread_.Stop();
|
thread_.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,8 +57,8 @@ void ClientGpuMemoryBufferManager::InitThread(
|
|||||||
mojom::GpuMemoryBufferFactoryPtrInfo gpu_info) {
|
mojom::GpuMemoryBufferFactoryPtrInfo gpu_info) {
|
||||||
gpu_.Bind(std::move(gpu_info));
|
gpu_.Bind(std::move(gpu_info));
|
||||||
gpu_.set_connection_error_handler(
|
gpu_.set_connection_error_handler(
|
||||||
base::Bind(&ClientGpuMemoryBufferManager::DisconnectGpuOnThread,
|
base::BindOnce(&ClientGpuMemoryBufferManager::DisconnectGpuOnThread,
|
||||||
base::Unretained(this)));
|
base::Unretained(this)));
|
||||||
weak_ptr_ = weak_ptr_factory_.GetWeakPtr();
|
weak_ptr_ = weak_ptr_factory_.GetWeakPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +97,7 @@ void ClientGpuMemoryBufferManager::AllocateGpuMemoryBufferOnThread(
|
|||||||
pending_allocation_waiters_.insert(wait);
|
pending_allocation_waiters_.insert(wait);
|
||||||
gpu_->CreateGpuMemoryBuffer(
|
gpu_->CreateGpuMemoryBuffer(
|
||||||
gfx::GpuMemoryBufferId(++counter_), size, format, usage,
|
gfx::GpuMemoryBufferId(++counter_), size, format, usage,
|
||||||
base::Bind(
|
base::BindOnce(
|
||||||
&ClientGpuMemoryBufferManager::OnGpuMemoryBufferAllocatedOnThread,
|
&ClientGpuMemoryBufferManager::OnGpuMemoryBufferAllocatedOnThread,
|
||||||
base::Unretained(this), handle, wait));
|
base::Unretained(this), handle, wait));
|
||||||
}
|
}
|
||||||
@@ -125,8 +120,8 @@ void ClientGpuMemoryBufferManager::DeletedGpuMemoryBuffer(
|
|||||||
if (!thread_.task_runner()->BelongsToCurrentThread()) {
|
if (!thread_.task_runner()->BelongsToCurrentThread()) {
|
||||||
thread_.task_runner()->PostTask(
|
thread_.task_runner()->PostTask(
|
||||||
FROM_HERE,
|
FROM_HERE,
|
||||||
base::Bind(&ClientGpuMemoryBufferManager::DeletedGpuMemoryBuffer,
|
base::BindOnce(&ClientGpuMemoryBufferManager::DeletedGpuMemoryBuffer,
|
||||||
base::Unretained(this), id, sync_token));
|
base::Unretained(this), id, sync_token));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,22 +144,22 @@ ClientGpuMemoryBufferManager::CreateGpuMemoryBuffer(
|
|||||||
base::WaitableEvent::InitialState::NOT_SIGNALED);
|
base::WaitableEvent::InitialState::NOT_SIGNALED);
|
||||||
thread_.task_runner()->PostTask(
|
thread_.task_runner()->PostTask(
|
||||||
FROM_HERE,
|
FROM_HERE,
|
||||||
base::Bind(&ClientGpuMemoryBufferManager::AllocateGpuMemoryBufferOnThread,
|
base::BindOnce(
|
||||||
base::Unretained(this), size, format, usage, &gmb_handle,
|
&ClientGpuMemoryBufferManager::AllocateGpuMemoryBufferOnThread,
|
||||||
&wait));
|
base::Unretained(this), size, format, usage, &gmb_handle, &wait));
|
||||||
wait.Wait();
|
wait.Wait();
|
||||||
if (gmb_handle.is_null())
|
if (gmb_handle.is_null())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
auto gmb_handle_id = gmb_handle.id;
|
auto gmb_handle_id = gmb_handle.id;
|
||||||
DestructionCallback callback =
|
auto callback =
|
||||||
base::Bind(&ClientGpuMemoryBufferManager::DeletedGpuMemoryBuffer,
|
base::BindOnce(&ClientGpuMemoryBufferManager::DeletedGpuMemoryBuffer,
|
||||||
weak_ptr_, gmb_handle_id);
|
weak_ptr_, gmb_handle_id);
|
||||||
std::unique_ptr<gpu::GpuMemoryBufferImpl> buffer(
|
std::unique_ptr<gpu::GpuMemoryBufferImpl> buffer =
|
||||||
gpu_memory_buffer_support_->CreateGpuMemoryBufferImplFromHandle(
|
gpu_memory_buffer_support_->CreateGpuMemoryBufferImplFromHandle(
|
||||||
std::move(gmb_handle), size, format, usage,
|
std::move(gmb_handle), size, format, usage,
|
||||||
base::Bind(&NotifyDestructionOnCorrectThread, thread_.task_runner(),
|
base::BindOnce(&NotifyDestructionOnCorrectThread,
|
||||||
callback)));
|
thread_.task_runner(), std::move(callback)));
|
||||||
if (!buffer) {
|
if (!buffer) {
|
||||||
DeletedGpuMemoryBuffer(gmb_handle_id, gpu::SyncToken());
|
DeletedGpuMemoryBuffer(gmb_handle_id, gpu::SyncToken());
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
#include "ui/gl/android/surface_texture.h"
|
#include "ui/gl/android/surface_texture.h"
|
||||||
|
|
||||||
#include <android/native_window_jni.h>
|
#include <android/native_window_jni.h>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "base/android/jni_android.h"
|
#include "base/android/jni_android.h"
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
@@ -31,19 +32,22 @@ SurfaceTexture::~SurfaceTexture() {
|
|||||||
Java_SurfaceTexturePlatformWrapper_destroy(env, j_surface_texture_);
|
Java_SurfaceTexturePlatformWrapper_destroy(env, j_surface_texture_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceTexture::SetFrameAvailableCallback(const base::Closure& callback) {
|
void SurfaceTexture::SetFrameAvailableCallback(
|
||||||
|
base::RepeatingClosure callback) {
|
||||||
JNIEnv* env = base::android::AttachCurrentThread();
|
JNIEnv* env = base::android::AttachCurrentThread();
|
||||||
Java_SurfaceTexturePlatformWrapper_setFrameAvailableCallback(
|
Java_SurfaceTexturePlatformWrapper_setFrameAvailableCallback(
|
||||||
env, j_surface_texture_,
|
env, j_surface_texture_,
|
||||||
reinterpret_cast<intptr_t>(new SurfaceTextureListener(callback, false)));
|
reinterpret_cast<intptr_t>(
|
||||||
|
new SurfaceTextureListener(std::move(callback), false)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceTexture::SetFrameAvailableCallbackOnAnyThread(
|
void SurfaceTexture::SetFrameAvailableCallbackOnAnyThread(
|
||||||
const base::Closure& callback) {
|
base::RepeatingClosure callback) {
|
||||||
JNIEnv* env = base::android::AttachCurrentThread();
|
JNIEnv* env = base::android::AttachCurrentThread();
|
||||||
Java_SurfaceTexturePlatformWrapper_setFrameAvailableCallback(
|
Java_SurfaceTexturePlatformWrapper_setFrameAvailableCallback(
|
||||||
env, j_surface_texture_,
|
env, j_surface_texture_,
|
||||||
reinterpret_cast<intptr_t>(new SurfaceTextureListener(callback, true)));
|
reinterpret_cast<intptr_t>(
|
||||||
|
new SurfaceTextureListener(std::move(callback), true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceTexture::UpdateTexImage() {
|
void SurfaceTexture::UpdateTexImage() {
|
||||||
|
@@ -29,13 +29,13 @@ class GL_EXPORT SurfaceTexture
|
|||||||
// Note: Since callbacks come in from Java objects that might outlive objects
|
// Note: Since callbacks come in from Java objects that might outlive objects
|
||||||
// being referenced from the callback, the only robust way here is to create
|
// being referenced from the callback, the only robust way here is to create
|
||||||
// the callback from a weak pointer to your object.
|
// the callback from a weak pointer to your object.
|
||||||
void SetFrameAvailableCallback(const base::Closure& callback);
|
void SetFrameAvailableCallback(base::RepeatingClosure callback);
|
||||||
|
|
||||||
// Set the listener callback, but allow it to be invoked on any thread. The
|
// Set the listener callback, but allow it to be invoked on any thread. The
|
||||||
// same caveats apply as SetFrameAvailableCallback, plus whatever other issues
|
// same caveats apply as SetFrameAvailableCallback, plus whatever other issues
|
||||||
// show up due to multithreading (e.g., don't bind the Closure to a method
|
// show up due to multithreading (e.g., don't bind the Closure to a method
|
||||||
// via a weak ref).
|
// via a weak ref).
|
||||||
void SetFrameAvailableCallbackOnAnyThread(const base::Closure& callback);
|
void SetFrameAvailableCallbackOnAnyThread(base::RepeatingClosure callback);
|
||||||
|
|
||||||
// Update the texture image to the most recent frame from the image stream.
|
// Update the texture image to the most recent frame from the image stream.
|
||||||
void UpdateTexImage();
|
void UpdateTexImage();
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#include "ui/gl/android/surface_texture_listener.h"
|
#include "ui/gl/android/surface_texture_listener.h"
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "base/location.h"
|
#include "base/location.h"
|
||||||
#include "base/single_thread_task_runner.h"
|
#include "base/single_thread_task_runner.h"
|
||||||
#include "base/threading/thread_task_runner_handle.h"
|
#include "base/threading/thread_task_runner_handle.h"
|
||||||
@@ -13,9 +15,9 @@ using base::android::JavaParamRef;
|
|||||||
|
|
||||||
namespace gl {
|
namespace gl {
|
||||||
|
|
||||||
SurfaceTextureListener::SurfaceTextureListener(const base::Closure& callback,
|
SurfaceTextureListener::SurfaceTextureListener(base::RepeatingClosure callback,
|
||||||
bool use_any_thread)
|
bool use_any_thread)
|
||||||
: callback_(callback),
|
: callback_(std::move(callback)),
|
||||||
browser_loop_(base::ThreadTaskRunnerHandle::Get()),
|
browser_loop_(base::ThreadTaskRunnerHandle::Get()),
|
||||||
use_any_thread_(use_any_thread) {}
|
use_any_thread_(use_any_thread) {}
|
||||||
|
|
||||||
|
@@ -38,12 +38,12 @@ class GL_EXPORT SurfaceTextureListener {
|
|||||||
// If use_any_thread is true, then the FrameAvailable callback will happen
|
// If use_any_thread is true, then the FrameAvailable callback will happen
|
||||||
// on whatever thread calls us. Otherwise, we will call it back on the same
|
// on whatever thread calls us. Otherwise, we will call it back on the same
|
||||||
// thread that was used to construct us.
|
// thread that was used to construct us.
|
||||||
SurfaceTextureListener(const base::Closure& callback, bool use_any_thread);
|
SurfaceTextureListener(base::RepeatingClosure callback, bool use_any_thread);
|
||||||
~SurfaceTextureListener();
|
~SurfaceTextureListener();
|
||||||
|
|
||||||
friend class SurfaceTexture;
|
friend class SurfaceTexture;
|
||||||
|
|
||||||
base::Closure callback_;
|
base::RepeatingClosure callback_;
|
||||||
|
|
||||||
scoped_refptr<base::SingleThreadTaskRunner> browser_loop_;
|
scoped_refptr<base::SingleThreadTaskRunner> browser_loop_;
|
||||||
|
|
||||||
|
@@ -159,7 +159,8 @@ void GLContextCGL::Destroy() {
|
|||||||
// Delay releasing the pixel format for 10 seconds to reduce the number of
|
// Delay releasing the pixel format for 10 seconds to reduce the number of
|
||||||
// unnecessary GPU switches.
|
// unnecessary GPU switches.
|
||||||
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
||||||
FROM_HERE, base::Bind(&CGLReleasePixelFormat, discrete_pixelformat_),
|
FROM_HERE,
|
||||||
|
base::BindOnce(&CGLReleasePixelFormat, discrete_pixelformat_),
|
||||||
base::TimeDelta::FromSeconds(10));
|
base::TimeDelta::FromSeconds(10));
|
||||||
} else {
|
} else {
|
||||||
CGLReleasePixelFormat(discrete_pixelformat_);
|
CGLReleasePixelFormat(discrete_pixelformat_);
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#include "ui/gl/gpu_timing.h"
|
#include "ui/gl/gpu_timing.h"
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "base/containers/circular_deque.h"
|
#include "base/containers/circular_deque.h"
|
||||||
#include "base/macros.h"
|
#include "base/macros.h"
|
||||||
#include "base/memory/ptr_util.h"
|
#include "base/memory/ptr_util.h"
|
||||||
@@ -30,7 +32,7 @@ int32_t QueryTimestampBits() {
|
|||||||
|
|
||||||
class GPUTimingImpl : public GPUTiming {
|
class GPUTimingImpl : public GPUTiming {
|
||||||
public:
|
public:
|
||||||
GPUTimingImpl(GLContextReal* context);
|
explicit GPUTimingImpl(GLContextReal* context);
|
||||||
~GPUTimingImpl() override;
|
~GPUTimingImpl() override;
|
||||||
|
|
||||||
void ForceTimeElapsedQuery() { force_time_elapsed_query_ = true; }
|
void ForceTimeElapsedQuery() { force_time_elapsed_query_ = true; }
|
||||||
@@ -51,8 +53,8 @@ class GPUTimingImpl : public GPUTiming {
|
|||||||
? (base::TimeTicks::Now() - base::TimeTicks()).InMicroseconds()
|
? (base::TimeTicks::Now() - base::TimeTicks()).InMicroseconds()
|
||||||
: cpu_time_for_testing_.Run();
|
: cpu_time_for_testing_.Run();
|
||||||
}
|
}
|
||||||
void SetCpuTimeForTesting(const base::Callback<int64_t(void)>& cpu_time) {
|
void SetCpuTimeForTesting(base::RepeatingCallback<int64_t(void)> cpu_time) {
|
||||||
cpu_time_for_testing_ = cpu_time;
|
cpu_time_for_testing_ = std::move(cpu_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateQueryResults();
|
void UpdateQueryResults();
|
||||||
@@ -75,7 +77,7 @@ class GPUTimingImpl : public GPUTiming {
|
|||||||
private:
|
private:
|
||||||
scoped_refptr<GPUTimingClient> CreateGPUTimingClient() override;
|
scoped_refptr<GPUTimingClient> CreateGPUTimingClient() override;
|
||||||
|
|
||||||
base::Callback<int64_t(void)> cpu_time_for_testing_;
|
base::RepeatingCallback<int64_t(void)> cpu_time_for_testing_;
|
||||||
GPUTiming::TimerType timer_type_ = GPUTiming::kTimerTypeInvalid;
|
GPUTiming::TimerType timer_type_ = GPUTiming::kTimerTypeInvalid;
|
||||||
uint32_t disjoint_counter_ = 0;
|
uint32_t disjoint_counter_ = 0;
|
||||||
int64_t offset_ = 0; // offset cache when timer_type_ == kTimerTypeARB
|
int64_t offset_ = 0; // offset cache when timer_type_ == kTimerTypeARB
|
||||||
@@ -84,7 +86,7 @@ class GPUTimingImpl : public GPUTiming {
|
|||||||
int32_t timestamp_bit_count_gl_ = -1; // gl implementation timestamp bits
|
int32_t timestamp_bit_count_gl_ = -1; // gl implementation timestamp bits
|
||||||
|
|
||||||
uint32_t next_timer_query_id_ = 0;
|
uint32_t next_timer_query_id_ = 0;
|
||||||
uint32_t next_good_timer_query_id_ = 0; // identify bad ids for disjoints.
|
uint32_t next_good_timer_query_id_ = 0; // identify bad ids for disjoints.
|
||||||
uint32_t query_disjoint_count_ = 0;
|
uint32_t query_disjoint_count_ = 0;
|
||||||
|
|
||||||
// Extra state tracking data for elapsed timer queries.
|
// Extra state tracking data for elapsed timer queries.
|
||||||
@@ -122,7 +124,7 @@ class QueryResult : public base::RefCounted<QueryResult> {
|
|||||||
|
|
||||||
class TimerQuery : public base::RefCounted<TimerQuery> {
|
class TimerQuery : public base::RefCounted<TimerQuery> {
|
||||||
public:
|
public:
|
||||||
TimerQuery(uint32_t next_id);
|
explicit TimerQuery(uint32_t next_id);
|
||||||
virtual void Destroy() = 0;
|
virtual void Destroy() = 0;
|
||||||
|
|
||||||
// Returns true when UpdateQueryResults() is ready to be called.
|
// Returns true when UpdateQueryResults() is ready to be called.
|
||||||
@@ -135,7 +137,7 @@ class TimerQuery : public base::RefCounted<TimerQuery> {
|
|||||||
virtual void PrepareNextUpdate(scoped_refptr<TimerQuery> prev) {}
|
virtual void PrepareNextUpdate(scoped_refptr<TimerQuery> prev) {}
|
||||||
|
|
||||||
uint32_t timer_query_id_ = 0;
|
uint32_t timer_query_id_ = 0;
|
||||||
int64_t time_stamp_ = 0; // Timestamp of the query, could be estimated.
|
int64_t time_stamp_ = 0; // Timestamp of the query, could be estimated.
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class base::RefCounted<TimerQuery>;
|
friend class base::RefCounted<TimerQuery>;
|
||||||
@@ -271,8 +273,7 @@ class TimeElapsedTimerQuery : public TimerQuery {
|
|||||||
|
|
||||||
class TimeStampTimerQuery : public TimerQuery {
|
class TimeStampTimerQuery : public TimerQuery {
|
||||||
public:
|
public:
|
||||||
TimeStampTimerQuery(uint32_t next_id)
|
explicit TimeStampTimerQuery(uint32_t next_id) : TimerQuery(next_id) {
|
||||||
: TimerQuery(next_id) {
|
|
||||||
glGenQueries(1, &gl_query_id_);
|
glGenQueries(1, &gl_query_id_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -649,9 +650,9 @@ int64_t GPUTimingClient::GetCurrentCPUTime() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GPUTimingClient::SetCpuTimeForTesting(
|
void GPUTimingClient::SetCpuTimeForTesting(
|
||||||
const base::Callback<int64_t(void)>& cpu_time) {
|
base::RepeatingCallback<int64_t(void)> cpu_time) {
|
||||||
DCHECK(gpu_timing_);
|
DCHECK(gpu_timing_);
|
||||||
gpu_timing_->SetCpuTimeForTesting(cpu_time);
|
gpu_timing_->SetCpuTimeForTesting(std::move(cpu_time));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GPUTimingClient::IsForceTimeElapsedQuery() {
|
bool GPUTimingClient::IsForceTimeElapsedQuery() {
|
||||||
|
@@ -141,7 +141,7 @@ class GL_EXPORT GPUTimingClient
|
|||||||
bool CheckAndResetTimerErrors();
|
bool CheckAndResetTimerErrors();
|
||||||
|
|
||||||
int64_t GetCurrentCPUTime();
|
int64_t GetCurrentCPUTime();
|
||||||
void SetCpuTimeForTesting(const base::Callback<int64_t(void)>& cpu_time);
|
void SetCpuTimeForTesting(base::RepeatingCallback<int64_t(void)> cpu_time);
|
||||||
|
|
||||||
bool IsForceTimeElapsedQuery();
|
bool IsForceTimeElapsedQuery();
|
||||||
void ForceTimeElapsedQuery();
|
void ForceTimeElapsedQuery();
|
||||||
|
@@ -71,7 +71,8 @@ class GPUTimingTest : public testing::Test {
|
|||||||
|
|
||||||
scoped_refptr<GPUTimingClient> client = context_->CreateGPUTimingClient();
|
scoped_refptr<GPUTimingClient> client = context_->CreateGPUTimingClient();
|
||||||
if (!cpu_time_bounded_) {
|
if (!cpu_time_bounded_) {
|
||||||
client->SetCpuTimeForTesting(base::Bind(&GPUTimingFake::GetFakeCPUTime));
|
client->SetCpuTimeForTesting(
|
||||||
|
base::BindRepeating(&GPUTimingFake::GetFakeCPUTime));
|
||||||
cpu_time_bounded_ = true;
|
cpu_time_bounded_ = true;
|
||||||
}
|
}
|
||||||
return client;
|
return client;
|
||||||
@@ -93,7 +94,7 @@ TEST_F(GPUTimingTest, FakeTimerTest) {
|
|||||||
gpu_timing_fake_queries_.SetCurrentCPUTime(123);
|
gpu_timing_fake_queries_.SetCurrentCPUTime(123);
|
||||||
EXPECT_EQ(123, gpu_timing_client->GetCurrentCPUTime());
|
EXPECT_EQ(123, gpu_timing_client->GetCurrentCPUTime());
|
||||||
|
|
||||||
base::Callback<int64_t(void)> empty;
|
base::RepeatingCallback<int64_t(void)> empty;
|
||||||
gpu_timing_client->SetCpuTimeForTesting(empty);
|
gpu_timing_client->SetCpuTimeForTesting(empty);
|
||||||
EXPECT_NE(123, gpu_timing_client->GetCurrentCPUTime());
|
EXPECT_NE(123, gpu_timing_client->GetCurrentCPUTime());
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user