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

Unified Diff: gpu/command_buffer/client/gles2_implementation_unittest.cc

Issue 2257533006: Free worker context resources on idle. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix-cleanup2
Patch Set: rebase Created 4 years, 4 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 | « gpu/command_buffer/client/gles2_implementation.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/client/gles2_implementation_unittest.cc
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc
index 2dd4ae7cd9f0bace6744844dd0cfe35161726070..62d50f27a774ddd807d6b4eeb2c5ed75f8dc88ba 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -16,8 +16,11 @@
#include <memory>
+#include "base/bind.h"
#include "base/compiler_specific.h"
#include "base/memory/ptr_util.h"
+#include "base/test/test_mock_time_task_runner.h"
+#include "base/threading/thread_task_runner_handle.h"
#include "gpu/command_buffer/client/client_test_helper.h"
#include "gpu/command_buffer/client/gles2_cmd_helper.h"
#include "gpu/command_buffer/client/program_info_manager.h"
@@ -483,6 +486,8 @@ class GLES2ImplementationTest : public testing::Test {
EXPECT_CALL(*gpu_control_, GetCapabilities())
.WillOnce(Return(capabilities));
+ task_runner_ = make_scoped_refptr(new base::TestMockTimeTaskRunner());
+
{
InSequence sequence;
@@ -490,7 +495,7 @@ class GLES2ImplementationTest : public testing::Test {
gl_.reset(new GLES2Implementation(
helper_.get(), share_group, transfer_buffer_.get(),
bind_generates_resource_client, lose_context_when_out_of_memory,
- support_client_side_arrays, gpu_control_.get(), nullptr));
+ support_client_side_arrays, gpu_control_.get(), task_runner_));
}
// The client should be set to something non-null.
@@ -540,6 +545,7 @@ class GLES2ImplementationTest : public testing::Test {
std::unique_ptr<GLES2CmdHelper> helper_;
std::unique_ptr<MockTransferBuffer> transfer_buffer_;
std::unique_ptr<GLES2Implementation> gl_;
+ scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
CommandBufferEntry* commands_;
int token_;
};
@@ -626,6 +632,10 @@ class GLES2ImplementationTest : public testing::Test {
return test_contexts_[0].command_buffer_.get();
}
+ base::TestMockTimeTaskRunner* task_runner() const {
+ return test_contexts_[0].task_runner_.get();
+ }
+
int GetNextToken() { return test_contexts_[0].GetNextToken(); }
const void* GetPut() {
@@ -4648,6 +4658,43 @@ TEST_F(GLES2ImplementationTest, TrimResources) {
}
}
+TEST_F(GLES2ImplementationTest, ClientBusyBasic) {
+ bool signaled = false;
+ gl_->SetIdleCallback(
+ base::Bind([](bool* signaled) { *signaled = true; }, &signaled));
+ auto busy = gl_->ClientBecameBusy();
+ gl_->ClientBecameNotBusy(std::move(busy));
+
+ task_runner()->FastForwardBy(base::TimeDelta::FromSeconds(5));
+ EXPECT_TRUE(signaled);
+}
+
+TEST_F(GLES2ImplementationTest, ClientBusyCancelled) {
+ auto runner = make_scoped_refptr(new base::TestMockTimeTaskRunner());
+ base::ThreadTaskRunnerHandle handle(runner);
+
+ bool signaled = false;
+ gl_->SetIdleCallback(
+ base::Bind([](bool* signaled) { *signaled = true; }, &signaled));
+ auto busy = gl_->ClientBecameBusy();
+
+ // This will trigger the idle callback to start counting down.
+ gl_->ClientBecameNotBusy(std::move(busy));
+
+ // Immediately take another busy lock to stop the countdown.
+ busy = gl_->ClientBecameBusy();
+
+ // Advance time and ensure that our callback was cancelled (does not run).
+ task_runner()->FastForwardBy(base::TimeDelta::FromSeconds(5));
+ EXPECT_FALSE(signaled);
+
+ // Release our busy lock, and let the idle callback run.
+ gl_->ClientBecameNotBusy(std::move(busy));
+
+ task_runner()->FastForwardBy(base::TimeDelta::FromSeconds(5));
+ EXPECT_TRUE(signaled);
+}
+
#include "base/macros.h"
#include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h"
« no previous file with comments | « gpu/command_buffer/client/gles2_implementation.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698