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

Side by Side Diff: cc/resources/resource_provider_unittest.cc

Issue 14409006: cc: Changes to use GL API for GpuMemoryBuffers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@glapi
Patch Set: s/GL_WRITE_ONLY/GL_READ_WRITE/ for map mode Created 7 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "cc/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "cc/base/scoped_ptr_deque.h" 11 #include "cc/base/scoped_ptr_deque.h"
12 #include "cc/base/scoped_ptr_hash_map.h" 12 #include "cc/base/scoped_ptr_hash_map.h"
13 #include "cc/output/output_surface.h" 13 #include "cc/output/output_surface.h"
14 #include "cc/test/fake_output_surface.h" 14 #include "cc/test/fake_output_surface.h"
15 #include "cc/test/test_web_graphics_context_3d.h" 15 #include "cc/test/test_web_graphics_context_3d.h"
16 #include "gpu/GLES2/gl2extchromium.h" 16 #include "gpu/GLES2/gl2extchromium.h"
17 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h" 19 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h"
20 #include "third_party/khronos/GLES2/gl2.h" 20 #include "third_party/khronos/GLES2/gl2.h"
21 #include "third_party/khronos/GLES2/gl2ext.h" 21 #include "third_party/khronos/GLES2/gl2ext.h"
22 #include "ui/gfx/rect.h" 22 #include "ui/gfx/rect.h"
23 23
24 using testing::Mock; 24 using testing::Mock;
25 using testing::NiceMock; 25 using testing::NiceMock;
26 using testing::Return; 26 using testing::Return;
27 using testing::StrictMock; 27 using testing::StrictMock;
28 using testing::_; 28 using testing::_;
29 using WebKit::WGC3Dboolean;
reveman 2013/05/17 01:48:08 what is this for?
kaanb 2013/05/17 21:27:36 Removed.
29 using WebKit::WGC3Dbyte; 30 using WebKit::WGC3Dbyte;
30 using WebKit::WGC3Denum; 31 using WebKit::WGC3Denum;
31 using WebKit::WGC3Dint; 32 using WebKit::WGC3Dint;
32 using WebKit::WGC3Dsizei; 33 using WebKit::WGC3Dsizei;
33 using WebKit::WGC3Duint; 34 using WebKit::WGC3Duint;
34 using WebKit::WebGLId; 35 using WebKit::WebGLId;
35 36
36 namespace cc { 37 namespace cc {
37 namespace { 38 namespace {
38 39
(...skipping 1189 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 MOCK_METHOD9(asyncTexSubImage2DCHROMIUM, 1229 MOCK_METHOD9(asyncTexSubImage2DCHROMIUM,
1229 void(WGC3Denum target, 1230 void(WGC3Denum target,
1230 WGC3Dint level, 1231 WGC3Dint level,
1231 WGC3Dint xoffset, 1232 WGC3Dint xoffset,
1232 WGC3Dint yoffset, 1233 WGC3Dint yoffset,
1233 WGC3Dsizei width, 1234 WGC3Dsizei width,
1234 WGC3Dsizei height, 1235 WGC3Dsizei height,
1235 WGC3Denum format, 1236 WGC3Denum format,
1236 WGC3Denum type, 1237 WGC3Denum type,
1237 const void* pixels)); 1238 const void* pixels));
1238 MOCK_METHOD1(waitAsyncTexImage2DCHROMIUM, void(WGC3Denum target)); 1239 MOCK_METHOD1(waitAsyncTexImage2DCHROMIUM, void(WGC3Denum));
1240 MOCK_METHOD3(createImageCHROMIUM, WGC3Duint(WGC3Dsizei, WGC3Dsizei,
1241 WGC3Denum));
1242 MOCK_METHOD1(destroyImageCHROMIUM, void(WGC3Duint));
1243 MOCK_METHOD2(mapImageCHROMIUM, void*(WGC3Duint, WGC3Denum));
1244 MOCK_METHOD1(unmapImageCHROMIUM, void(WGC3Duint));
1245 MOCK_METHOD2(bindTexImage2DCHROMIUM, void(WGC3Denum, WGC3Dint));
1239 }; 1246 };
1240 1247
1241 TEST_P(ResourceProviderTest, TextureAllocation) { 1248 TEST_P(ResourceProviderTest, TextureAllocation) {
1242 // Only for GL textures. 1249 // Only for GL textures.
1243 if (GetParam() != ResourceProvider::GLTexture) 1250 if (GetParam() != ResourceProvider::GLTexture)
1244 return; 1251 return;
1245 scoped_ptr<WebKit::WebGraphicsContext3D> mock_context( 1252 scoped_ptr<WebKit::WebGraphicsContext3D> mock_context(
1246 static_cast<WebKit::WebGraphicsContext3D*>( 1253 static_cast<WebKit::WebGraphicsContext3D*>(
1247 new NiceMock<AllocationTrackingContext3D>)); 1254 new NiceMock<AllocationTrackingContext3D>));
1248 scoped_ptr<OutputSurface> output_surface( 1255 scoped_ptr<OutputSurface> output_surface(
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1410 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, 1417 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
1411 GL_INNOCENT_CONTEXT_RESET_ARB); 1418 GL_INNOCENT_CONTEXT_RESET_ARB);
1412 resource_provider->AcquirePixelBuffer(id); 1419 resource_provider->AcquirePixelBuffer(id);
1413 uint8_t* buffer = resource_provider->MapPixelBuffer(id); 1420 uint8_t* buffer = resource_provider->MapPixelBuffer(id);
1414 EXPECT_TRUE(buffer == NULL); 1421 EXPECT_TRUE(buffer == NULL);
1415 resource_provider->UnmapPixelBuffer(id); 1422 resource_provider->UnmapPixelBuffer(id);
1416 resource_provider->ReleasePixelBuffer(id); 1423 resource_provider->ReleasePixelBuffer(id);
1417 Mock::VerifyAndClearExpectations(context); 1424 Mock::VerifyAndClearExpectations(context);
1418 } 1425 }
1419 1426
1427 TEST_P(ResourceProviderTest, GpuMemoryBuffers) {
1428 // Only for GL textures.
1429 if (GetParam() != ResourceProvider::GLTexture)
1430 return;
1431 scoped_ptr<WebKit::WebGraphicsContext3D> mock_context(
1432 static_cast<WebKit::WebGraphicsContext3D*>(
1433 new StrictMock<AllocationTrackingContext3D>));
1434 scoped_ptr<OutputSurface> output_surface(
1435 FakeOutputSurface::Create3d(mock_context.Pass()));
1436
1437 const int kWidth = 2;
1438 const int kHeight = 2;
1439 gfx::Size size(kWidth, kHeight);
1440 WGC3Denum format = GL_RGBA;
1441 ResourceProvider::ResourceId id = 0;
1442 const unsigned kTextureId = 123u;
1443 const unsigned kImageId = 234u;
1444
1445 AllocationTrackingContext3D* context =
1446 static_cast<AllocationTrackingContext3D*>(output_surface->context3d());
1447 scoped_ptr<ResourceProvider> resource_provider(
1448 ResourceProvider::Create(output_surface.get(), 0));
1449 resource_provider->SetUseGpuMemoryBuffers(true);
1450
1451 EXPECT_CALL(*context, createTexture()).WillOnce(Return(kTextureId))
1452 .RetiresOnSaturation();
1453 // First bindTexture call is within CreateResource, second is within
1454 // BeginSetPixels.
1455 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1)
1456 .RetiresOnSaturation();
1457 id = resource_provider->CreateResource(
1458 size, format, ResourceProvider::TextureUsageAny);
1459 EXPECT_CALL(*context, createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES))
1460 .WillOnce(Return(kImageId));
1461 resource_provider->AcquirePixelBuffer(id);
1462
1463 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)).Times(1)
1464 .RetiresOnSaturation();
1465 EXPECT_CALL(*context, bindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId))
1466 .Times(1)
1467 .RetiresOnSaturation();
1468 resource_provider->BeginSetPixels(id);
1469
1470 void* dummy_mapped_buffer_address = NULL;
1471 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId, GL_WRITE_ONLY))
1472 .WillOnce(Return(dummy_mapped_buffer_address))
1473 .RetiresOnSaturation();
1474 resource_provider->MapPixelBuffer(id);
1475
1476 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId))
1477 .Times(1)
1478 .RetiresOnSaturation();
1479 resource_provider->UnmapPixelBuffer(id);
1480
1481 EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId))
1482 .Times(1)
1483 .RetiresOnSaturation();
1484 resource_provider->ReleasePixelBuffer(id);
1485
1486 // Texture will be deleted when ResourceProvider destructor is
1487 // called when it goes out of scope when this method returns.
1488 EXPECT_CALL(*context, deleteTexture(kTextureId))
1489 .Times(1)
1490 .RetiresOnSaturation();
1491 }
1492
1420 INSTANTIATE_TEST_CASE_P( 1493 INSTANTIATE_TEST_CASE_P(
1421 ResourceProviderTests, 1494 ResourceProviderTests,
1422 ResourceProviderTest, 1495 ResourceProviderTest,
1423 ::testing::Values(ResourceProvider::GLTexture, ResourceProvider::Bitmap)); 1496 ::testing::Values(ResourceProvider::GLTexture, ResourceProvider::Bitmap));
1424 1497
1425 } // namespace 1498 } // namespace
1426 } // namespace cc 1499 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698