12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef CC_TEST_LAYER_TREE_PIXEL_TEST_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define CC_TEST_LAYER_TREE_PIXEL_TEST_H_ 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 8558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include <vector> 9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "cc/resources/single_release_callback.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/layer_tree_test.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gl/gl_implementation.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class SkBitmap; 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gpu { 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GLInProcessContext; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CopyOutputRequest; 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CopyOutputResult; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHost; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PixelComparator; 28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass SolidColorLayer; 29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass TextureLayer; 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class TextureMailbox; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreePixelTest : public LayerTreeTest { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreePixelTest(); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~LayerTreePixelTest(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) OVERRIDE; 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE; 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual scoped_ptr<CopyOutputRequest> CreateCopyOutputRequest(); 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void ReadbackResult(scoped_ptr<CopyOutputResult> result); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void BeginTest() OVERRIDE; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetupTree() OVERRIDE; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AfterTest() OVERRIDE; 47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual void EndTest() OVERRIDE; 48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void TryEndTest(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<SolidColorLayer> CreateSolidColorLayer(const gfx::Rect& rect, 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor color); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<SolidColorLayer> CreateSolidColorLayerWithBorder( 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Rect& rect, 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SkColor color, 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int border_width, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SkColor border_color); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<TextureLayer> CreateTextureLayer(const gfx::Rect& rect, 59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const SkBitmap& bitmap); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch enum PixelTestType { 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GL_WITH_DEFAULT, 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GL_WITH_BITMAP, 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SOFTWARE_WITH_DEFAULT, 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SOFTWARE_WITH_BITMAP 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void RunPixelTest(PixelTestType type, 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<Layer> content_root, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath file_name); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void RunPixelTestWithReadbackTarget(PixelTestType type, 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_refptr<Layer> content_root, 74b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Layer* target, 75b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::FilePath file_name); 76b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<SkBitmap> CopyTextureMailboxToBitmap( 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Size& size, 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const TextureMailbox& texture_mailbox); 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void CopyBitmapToTextureMailboxAsTexture( 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const SkBitmap& bitmap, 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) TextureMailbox* texture_mailbox, 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<SingleReleaseCallback>* release_callback); 85558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ReleaseTextureMailbox(scoped_ptr<gpu::GLInProcessContext> context, 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint32 texture, 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint32 sync_point, 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool lost_resource); 90558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Common CSS colors defined for tests to use. 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum Colors { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kCSSOrange = 0xffffa500, 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kCSSBrown = 0xffa52a2a, 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kCSSGreen = 0xff008000, 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::DisableNullDrawGLBindings enable_pixel_output_; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<PixelComparator> pixel_comparator_; 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PixelTestType test_type_; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<Layer> content_root_; 102b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Layer* readback_target_; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath ref_file_; 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<SkBitmap> result_bitmap_; 105558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch std::vector<scoped_refptr<TextureLayer> > texture_layers_; 106558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int pending_texture_mailbox_callbacks_; 1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool impl_side_painting_; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_TEST_LAYER_TREE_PIXEL_TEST_H_ 113