Commit 9fca1d27 authored by moshayedi's avatar moshayedi Committed by Commit bot

mustash: gpu: implement SignalQuery in CommandBufferLocal

We need this to make snapshots work in mus. GLRenderer::GetFramebufferPixelsAsync calls this function to respond to CopyOutputRequests.

BUG=557397

Review URL: https://codereview.chromium.org/1610783002

Cr-Commit-Position: refs/heads/master@{#370781}
parent 3590476f
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "gpu/command_buffer/service/image_factory.h" #include "gpu/command_buffer/service/image_factory.h"
#include "gpu/command_buffer/service/image_manager.h" #include "gpu/command_buffer/service/image_manager.h"
#include "gpu/command_buffer/service/mailbox_manager.h" #include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/query_manager.h"
#include "gpu/command_buffer/service/sync_point_manager.h" #include "gpu/command_buffer/service/sync_point_manager.h"
#include "gpu/command_buffer/service/transfer_buffer_manager.h" #include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "gpu/command_buffer/service/valuebuffer_manager.h" #include "gpu/command_buffer/service/valuebuffer_manager.h"
...@@ -499,4 +500,16 @@ void CommandBufferDriver::OnContextLost(uint32_t reason) { ...@@ -499,4 +500,16 @@ void CommandBufferDriver::OnContextLost(uint32_t reason) {
client_->DidLoseContext(reason); client_->DidLoseContext(reason);
} }
void CommandBufferDriver::SignalQuery(uint32_t query_id,
const base::Closure& callback) {
DCHECK(CalledOnValidThread());
gpu::gles2::QueryManager* query_manager = decoder_->GetQueryManager();
gpu::gles2::QueryManager::Query* query = query_manager->GetQuery(query_id);
if (query)
query->AddCallback(callback);
else
callback.Run();
}
} // namespace mus } // namespace mus
...@@ -87,6 +87,7 @@ class CommandBufferDriver : base::NonThreadSafe { ...@@ -87,6 +87,7 @@ class CommandBufferDriver : base::NonThreadSafe {
} }
uint32_t GetUnprocessedOrderNum() const; uint32_t GetUnprocessedOrderNum() const;
uint32_t GetProcessedOrderNum() const; uint32_t GetProcessedOrderNum() const;
void SignalQuery(uint32_t query_id, const base::Closure& callback);
private: private:
bool MakeCurrent(); bool MakeCurrent();
......
...@@ -62,6 +62,10 @@ bool CreateMapAndDupSharedBuffer(size_t size, ...@@ -62,6 +62,10 @@ bool CreateMapAndDupSharedBuffer(size_t size,
return true; return true;
} }
void PostTask(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
const base::Closure& callback) {
task_runner->PostTask(FROM_HERE, callback);
}
} }
const unsigned int GL_READ_WRITE_CHROMIUM = 0x78F2; const unsigned int GL_READ_WRITE_CHROMIUM = 0x78F2;
...@@ -308,11 +312,13 @@ void CommandBufferLocal::SignalSyncPoint(uint32_t sync_point, ...@@ -308,11 +312,13 @@ void CommandBufferLocal::SignalSyncPoint(uint32_t sync_point,
NOTREACHED(); NOTREACHED();
} }
void CommandBufferLocal::SignalQuery(uint32_t query, void CommandBufferLocal::SignalQuery(uint32_t query_id,
const base::Closure& callback) { const base::Closure& callback) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
// TODO(piman)
NOTIMPLEMENTED(); gpu_state_->command_buffer_task_runner()->PostTask(
driver_.get(), base::Bind(&CommandBufferLocal::SignalQueryOnGpuThread,
base::Unretained(this), query_id, callback));
} }
void CommandBufferLocal::SetLock(base::Lock* lock) { void CommandBufferLocal::SetLock(base::Lock* lock) {
...@@ -524,6 +530,14 @@ bool CommandBufferLocal::DeleteOnGpuThread() { ...@@ -524,6 +530,14 @@ bool CommandBufferLocal::DeleteOnGpuThread() {
return true; return true;
} }
bool CommandBufferLocal::SignalQueryOnGpuThread(uint32_t query_id,
const base::Closure& callback) {
// |callback| should run on the client thread.
driver_->SignalQuery(
query_id, base::Bind(&PostTask, client_thread_task_runner_, callback));
return true;
}
void CommandBufferLocal::DidLoseContextOnClientThread(uint32_t reason) { void CommandBufferLocal::DidLoseContextOnClientThread(uint32_t reason) {
if (client_) if (client_)
client_->DidLoseContext(); client_->DidLoseContext();
......
...@@ -88,7 +88,7 @@ class CommandBufferLocal : public gpu::CommandBuffer, ...@@ -88,7 +88,7 @@ class CommandBufferLocal : public gpu::CommandBuffer,
void RetireSyncPoint(uint32_t sync_point) override; void RetireSyncPoint(uint32_t sync_point) override;
void SignalSyncPoint(uint32_t sync_point, void SignalSyncPoint(uint32_t sync_point,
const base::Closure& callback) override; const base::Closure& callback) override;
void SignalQuery(uint32_t query, const base::Closure& callback) override; void SignalQuery(uint32_t query_id, const base::Closure& callback) override;
void SetLock(base::Lock*) override; void SetLock(base::Lock*) override;
bool IsGpuChannelLost() override; bool IsGpuChannelLost() override;
void EnsureWorkVisible() override; void EnsureWorkVisible() override;
...@@ -133,6 +133,7 @@ class CommandBufferLocal : public gpu::CommandBuffer, ...@@ -133,6 +133,7 @@ class CommandBufferLocal : public gpu::CommandBuffer,
bool MakeProgressOnGpuThread(base::WaitableEvent* event, bool MakeProgressOnGpuThread(base::WaitableEvent* event,
gpu::CommandBuffer::State* state); gpu::CommandBuffer::State* state);
bool DeleteOnGpuThread(); bool DeleteOnGpuThread();
bool SignalQueryOnGpuThread(uint32_t query_id, const base::Closure& callback);
// Helper functions are called in the client thread. // Helper functions are called in the client thread.
void DidLoseContextOnClientThread(uint32_t reason); void DidLoseContextOnClientThread(uint32_t reason);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment