144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org// Copyright 2013 The Chromium Authors. All rights reserved. 243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Use of this source code is governed by a BSD-style license that can be 343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// found in the LICENSE file. 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/files/scoped_temp_dir.h" 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/threading/thread.h" 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "content/browser/browser_thread_impl.h" 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "content/browser/gpu/shader_disk_cache.h" 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "content/public/test/test_browser_thread_bundle.h" 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "net/base/test_completion_callback.h" 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "testing/gtest/include/gtest/gtest.h" 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace content { 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace { 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst int kDefaultClientId = 42; 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char kCacheKey[] = "key"; 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenconst char kCacheValue[] = "cached value"; 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} // namespace 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass ShaderDiskCacheTest : public testing::Test { 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ShaderDiskCacheTest() 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) { 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen virtual ~ShaderDiskCacheTest() {} 2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const base::FilePath& cache_path() { return temp_dir_.path(); } 3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void InitCache() { 33f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 34b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org ShaderCacheFactory::GetInstance()->SetCacheInfo(kDefaultClientId, 3565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org cache_path()); 36ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org } 37dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 39fa943b736b1d996084393011529d568165bb5d83lrn@chromium.org virtual void TearDown() OVERRIDE { 4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ShaderCacheFactory::GetInstance()->RemoveCacheInfo(kDefaultClientId); 41b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org } 42a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen base::ScopedTempDir temp_dir_; 44dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org content::TestBrowserThreadBundle thread_bundle_; 45dff694e8cc18aa9640e92962de2699b9d07a7690vegorov@chromium.org 4671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org DISALLOW_COPY_AND_ASSIGN(ShaderDiskCacheTest); 4771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org}; 4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 49b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.orgTEST_F(ShaderDiskCacheTest, ClearsCache) { 50b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org InitCache(); 51b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 52b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org scoped_refptr<ShaderDiskCache> cache = 53b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org ShaderCacheFactory::GetInstance()->Get(kDefaultClientId); 54b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org ASSERT_TRUE(cache.get() != NULL); 55b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 56b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org net::TestCompletionCallback available_cb; 57b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org int rv = cache->SetAvailableCallback(available_cb.callback()); 58b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org ASSERT_EQ(net::OK, available_cb.GetResult(rv)); 59b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org EXPECT_EQ(0, cache->Size()); 60b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 61b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org cache->Cache(kCacheKey, kCacheValue); 62b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 63b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org net::TestCompletionCallback complete_cb; 64b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org rv = cache->SetCacheCompleteCallback(complete_cb.callback()); 65b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org ASSERT_EQ(net::OK, complete_cb.GetResult(rv)); 66b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org EXPECT_EQ(1, cache->Size()); 67b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 68b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org base::Time time; 69b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org net::TestCompletionCallback clear_cb; 70b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org rv = cache->Clear(time, time, clear_cb.callback()); 71b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org ASSERT_EQ(net::OK, clear_cb.GetResult(rv)); 72b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org EXPECT_EQ(0, cache->Size()); 73b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org}; 74b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org 75b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org} // namespace content 76b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org