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 @@
#include "gpu/command_buffer/service/image_factory.h"
#include "gpu/command_buffer/service/image_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/transfer_buffer_manager.h"
#include "gpu/command_buffer/service/valuebuffer_manager.h"
......@@ -499,4 +500,16 @@ void CommandBufferDriver::OnContextLost(uint32_t 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
......@@ -87,6 +87,7 @@ class CommandBufferDriver : base::NonThreadSafe {
}
uint32_t GetUnprocessedOrderNum() const;
uint32_t GetProcessedOrderNum() const;
void SignalQuery(uint32_t query_id, const base::Closure& callback);
private:
bool MakeCurrent();
......
......@@ -62,6 +62,10 @@ bool CreateMapAndDupSharedBuffer(size_t size,
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;
......@@ -308,11 +312,13 @@ void CommandBufferLocal::SignalSyncPoint(uint32_t sync_point,
NOTREACHED();
}
void CommandBufferLocal::SignalQuery(uint32_t query,
void CommandBufferLocal::SignalQuery(uint32_t query_id,
const base::Closure& callback) {
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) {
......@@ -524,6 +530,14 @@ bool CommandBufferLocal::DeleteOnGpuThread() {
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) {
if (client_)
client_->DidLoseContext();
......
......@@ -88,7 +88,7 @@ class CommandBufferLocal : public gpu::CommandBuffer,
void RetireSyncPoint(uint32_t sync_point) override;
void SignalSyncPoint(uint32_t sync_point,
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;
bool IsGpuChannelLost() override;
void EnsureWorkVisible() override;
......@@ -133,6 +133,7 @@ class CommandBufferLocal : public gpu::CommandBuffer,
bool MakeProgressOnGpuThread(base::WaitableEvent* event,
gpu::CommandBuffer::State* state);
bool DeleteOnGpuThread();
bool SignalQueryOnGpuThread(uint32_t query_id, const base::Closure& callback);
// Helper functions are called in the client thread.
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