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

Side by Side Diff: components/exo/buffer_unittest.cc

Issue 2584953002: exo::CompositorFrameSinkHolder's release callbacks hold ref (Closed)
Patch Set: Use ScopedClosureRunner Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <GLES2/gl2extchromium.h> 5 #include <GLES2/gl2extchromium.h>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "cc/output/context_provider.h" 8 #include "cc/output/context_provider.h"
9 #include "cc/resources/single_release_callback.h" 9 #include "cc/resources/single_release_callback.h"
10 #include "components/exo/buffer.h" 10 #include "components/exo/buffer.h"
(...skipping 23 matching lines...) Expand all
34 34
35 // Set the release callback. 35 // Set the release callback.
36 int release_call_count = 0; 36 int release_call_count = 0;
37 buffer->set_release_callback( 37 buffer->set_release_callback(
38 base::Bind(&Release, base::Unretained(&release_call_count))); 38 base::Bind(&Release, base::Unretained(&release_call_count)));
39 39
40 buffer->OnAttach(); 40 buffer->OnAttach();
41 // Produce a texture mailbox for the contents of the buffer. 41 // Produce a texture mailbox for the contents of the buffer.
42 cc::TextureMailbox texture_mailbox; 42 cc::TextureMailbox texture_mailbox;
43 std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback = 43 std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback =
44 buffer->ProduceTextureMailbox(&texture_mailbox, false, true); 44 buffer->ProduceTextureMailbox(&texture_mailbox, false, true, nullptr);
45 ASSERT_TRUE(buffer_release_callback); 45 ASSERT_TRUE(buffer_release_callback);
46 46
47 // Release buffer. 47 // Release buffer.
48 buffer_release_callback->Run(gpu::SyncToken(), false); 48 buffer_release_callback->Run(gpu::SyncToken(), false);
49 49
50 ASSERT_EQ(release_call_count, 0); 50 ASSERT_EQ(release_call_count, 0);
51 51
52 buffer->OnDetach(); 52 buffer->OnDetach();
53 53
54 // Release() should have been called exactly once. 54 // Release() should have been called exactly once.
55 ASSERT_EQ(release_call_count, 1); 55 ASSERT_EQ(release_call_count, 1);
56 } 56 }
57 57
58 TEST_F(BufferTest, IsLost) { 58 TEST_F(BufferTest, IsLost) {
59 gfx::Size buffer_size(256, 256); 59 gfx::Size buffer_size(256, 256);
60 std::unique_ptr<Buffer> buffer( 60 std::unique_ptr<Buffer> buffer(
61 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); 61 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size)));
62 62
63 buffer->OnAttach(); 63 buffer->OnAttach();
64 // Acquire a texture mailbox for the contents of the buffer. 64 // Acquire a texture mailbox for the contents of the buffer.
65 cc::TextureMailbox texture_mailbox; 65 cc::TextureMailbox texture_mailbox;
66 std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback = 66 std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback =
67 buffer->ProduceTextureMailbox(&texture_mailbox, false, true); 67 buffer->ProduceTextureMailbox(&texture_mailbox, false, true, nullptr);
68 ASSERT_TRUE(buffer_release_callback); 68 ASSERT_TRUE(buffer_release_callback);
69 69
70 scoped_refptr<cc::ContextProvider> context_provider = 70 scoped_refptr<cc::ContextProvider> context_provider =
71 aura::Env::GetInstance() 71 aura::Env::GetInstance()
72 ->context_factory() 72 ->context_factory()
73 ->SharedMainThreadContextProvider(); 73 ->SharedMainThreadContextProvider();
74 if (context_provider) { 74 if (context_provider) {
75 gpu::gles2::GLES2Interface* gles2 = context_provider->ContextGL(); 75 gpu::gles2::GLES2Interface* gles2 = context_provider->ContextGL();
76 gles2->LoseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 76 gles2->LoseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
77 GL_INNOCENT_CONTEXT_RESET_ARB); 77 GL_INNOCENT_CONTEXT_RESET_ARB);
78 } 78 }
79 79
80 // Release buffer. 80 // Release buffer.
81 bool is_lost = true; 81 bool is_lost = true;
82 buffer_release_callback->Run(gpu::SyncToken(), is_lost); 82 buffer_release_callback->Run(gpu::SyncToken(), is_lost);
83 83
84 // Producing a new texture mailbox for the contents of the buffer. 84 // Producing a new texture mailbox for the contents of the buffer.
85 std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback2 = 85 std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback2 =
86 buffer->ProduceTextureMailbox(&texture_mailbox, false, false); 86 buffer->ProduceTextureMailbox(&texture_mailbox, false, false, nullptr);
87 ASSERT_TRUE(buffer_release_callback2); 87 ASSERT_TRUE(buffer_release_callback2);
88 buffer->OnDetach(); 88 buffer->OnDetach();
89 89
90 buffer_release_callback2->Run(gpu::SyncToken(), false); 90 buffer_release_callback2->Run(gpu::SyncToken(), false);
91 } 91 }
92 92
93 } // namespace 93 } // namespace
94 } // namespace exo 94 } // namespace exo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698