15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/test/histogram_tester.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/nacl/nacl_browsertest_util.h" 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/nacl/browser/nacl_browser.h" 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/trusted/service_runtime/nacl_error_code.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ppapi/c/private/ppb_nacl_private.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)NACL_BROWSER_TEST_F(NaClBrowserTest, SuccessfulLoadUMA, { 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::HistogramTester histograms; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load a NaCl module to generate UMA data. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunLoadTest(FILE_PATH_LITERAL("nacl_load_test.html")); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure histograms from child processes have been accumulated in the 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser brocess. 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::FetchHistogramsFromChildProcesses(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Did the plugin report success? 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) histograms.ExpectUniqueSample("NaCl.LoadStatus.Plugin", 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PP_NACL_ERROR_LOAD_SUCCESS, 1); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Did the sel_ldr report success? 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) histograms.ExpectUniqueSample("NaCl.LoadStatus.SelLdr", 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOAD_OK, 1); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Check validation cache usage: 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (IsAPnaclTest()) { 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Should have received 3 validation queries: 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // - One for IRT for actual application 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // - Two for two translator nexes 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The translators don't currently use the IRT, so there is no IRT cache 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // query for those two loads. The PNaCl main nexe comes from a 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // delete-on-close temp file, so it doesn't have a stable identity 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // for validation caching. All three query results should be misses. 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectUniqueSample("NaCl.ValidationCache.Query", 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nacl::NaClBrowser::CACHE_MISS, 3); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Should have received a cache setting afterwards for IRT and translators. 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectUniqueSample("NaCl.ValidationCache.Set", 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nacl::NaClBrowser::CACHE_HIT, 3); 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else { 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // For the open-web, only the IRT is considered a "safe" and 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // identity-cachable file. The nexes and .so files are not. 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Should have one cache query for the IRT. 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectUniqueSample("NaCl.ValidationCache.Query", 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nacl::NaClBrowser::CACHE_MISS, 1); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Should have received a cache setting afterwards for IRT and translators. 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectUniqueSample("NaCl.ValidationCache.Set", 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nacl::NaClBrowser::CACHE_HIT, 1); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we have other important histograms. 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!IsAPnaclTest()) { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.StartupTime.LoadModule", 1); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.StartupTime.Total", 1); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.Size.Manifest", 1); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.Size.Nexe", 1); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Options.PNaCl.OptLevel", 1); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.Size.Manifest", 1); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.Size.Pexe", 1); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.Size.PNaClTranslatedNexe", 1); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.Size.PexeNexeSizePct", 1); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.PNaClLoadTime.LoadCompiler", 1); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.PNaClLoadTime.LoadLinker", 1); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.PNaClLoadTime.CompileTime", 1); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.PNaClLoadTime.CompileKBPerSec", 1); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.PNaClLoadTime.LinkTime", 1); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount( 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "NaCl.Perf.PNaClLoadTime.PctCompiledWhenFullyDownloaded", 1); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.PNaClLoadTime.TotalUncachedTime", 1); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount( 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "NaCl.Perf.PNaClLoadTime.TotalUncachedKBPerSec", 1); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) histograms.ExpectTotalCount("NaCl.Perf.PNaClCache.IsHit", 1); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class NaClBrowserTestNewlibVcacheExtension: 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public NaClBrowserTestNewlibExtension { 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual base::FilePath::StringType Variant() OVERRIDE { 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return FILE_PATH_LITERAL("extension_vcache_test/newlib"); 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibVcacheExtension, 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ValidationCacheOfMainNexe) { 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::HistogramTester histograms; 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Hardcoded extension AppID that corresponds to the hardcoded 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // public key in the manifest.json file. We need to load the extension 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // nexe from the same origin, so we can't just try to load the extension 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // nexe as a mime-type handler from a non-extension URL. 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FilePath::StringType full_url = 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FILE_PATH_LITERAL("chrome-extension://cbcdidchbppangcjoddlpdjlenngjldk/") 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FILE_PATH_LITERAL("extension_validation_cache.html"); 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RunNaClIntegrationTest(full_url, true); 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Make sure histograms from child processes have been accumulated in the 10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // browser brocess. 10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::FetchHistogramsFromChildProcesses(); 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Should have received 2 validation queries (one for IRT and one for NEXE), 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // and responded with a miss. 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) histograms.ExpectBucketCount("NaCl.ValidationCache.Query", 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) nacl::NaClBrowser::CACHE_MISS, 2); 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TOTAL should then be 2 queries so far. 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) histograms.ExpectTotalCount("NaCl.ValidationCache.Query", 2); 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Should have received a cache setting afterwards for IRT and nexe. 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) histograms.ExpectBucketCount("NaCl.ValidationCache.Set", 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) nacl::NaClBrowser::CACHE_HIT, 2); 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Load it again to hit the cache. 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) RunNaClIntegrationTest(full_url, true); 11703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::FetchHistogramsFromChildProcesses(); 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Should have received 2 more validation queries later (IRT and NEXE), 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // and responded with a hit. 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) histograms.ExpectBucketCount("NaCl.ValidationCache.Query", 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) nacl::NaClBrowser::CACHE_HIT, 2); 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TOTAL should then be 4 queries now. 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) histograms.ExpectTotalCount("NaCl.ValidationCache.Query", 4); 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Still only 2 settings. 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) histograms.ExpectTotalCount("NaCl.ValidationCache.Set", 2); 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class NaClBrowserTestGLibcVcacheExtension: 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public NaClBrowserTestGLibcExtension { 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual base::FilePath::StringType Variant() OVERRIDE { 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return FILE_PATH_LITERAL("extension_vcache_test/glibc"); 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(NaClBrowserTestGLibcVcacheExtension, 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ValidationCacheOfMainNexe) { 13803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Make sure histograms from child processes have been accumulated in the 13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // browser process. 14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::HistogramTester histograms; 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Hardcoded extension AppID that corresponds to the hardcoded 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // public key in the manifest.json file. We need to load the extension 1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // nexe from the same origin, so we can't just try to load the extension 1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // nexe as a mime-type handler from a non-extension URL. 1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::FilePath::StringType full_url = 1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FILE_PATH_LITERAL("chrome-extension://cbcdidchbppangcjoddlpdjlenngjldk/") 1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FILE_PATH_LITERAL("extension_validation_cache.html"); 1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) RunNaClIntegrationTest(full_url, true); 1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Should have received 9 validation queries, which respond with misses: 1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - the IRT 1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - ld.so (the initial nexe) 1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - main.nexe 1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - libppapi_cpp.so 1556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - libpthread.so.9b15f6a6 1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - libstdc++.so.6 1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - libgcc_s.so.1 1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - libc.so.9b15f6a6 1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - libm.so.9b15f6a6 1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) histograms.ExpectBucketCount("NaCl.ValidationCache.Query", 1616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) nacl::NaClBrowser::CACHE_MISS, 9); 1626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // TOTAL should then be 9 queries so far. 1636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) histograms.ExpectTotalCount("NaCl.ValidationCache.Query", 9); 1646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Should have received a cache setting afterwards for IRT and nexe. 1656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) histograms.ExpectBucketCount("NaCl.ValidationCache.Set", 1666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) nacl::NaClBrowser::CACHE_HIT, 9); 1676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Load it again to hit the cache. 1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) RunNaClIntegrationTest(full_url, true); 1706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Should have received 9 more validation queries and responded with hits. 1716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) histograms.ExpectBucketCount("NaCl.ValidationCache.Query", 1726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) nacl::NaClBrowser::CACHE_HIT, 9); 1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) histograms.ExpectTotalCount("NaCl.ValidationCache.Query", 18); 1746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) histograms.ExpectTotalCount("NaCl.ValidationCache.Set", 9); 1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Test that validation for the 2 PNaCl translator nexes can be cached. 178116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl, 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ValidationCacheOfTranslatorNexes) { 18003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::HistogramTester histograms; 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Run a load test w/ one pexe cache identity. 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RunLoadTest(FILE_PATH_LITERAL("pnacl_options.html?use_nmf=o_0")); 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::FetchHistogramsFromChildProcesses(); 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Should have received 3 validation queries: 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // - One for IRT for actual application 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // - Two for two translator nexes 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The translators don't currently use the IRT, so there is no IRT cache 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // query for those two loads. The PNaCl main nexe comes from a 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // delete-on-close temp file, so it doesn't have a stable identity 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // for validation caching. All three query results should be misses. 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectUniqueSample("NaCl.ValidationCache.Query", 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nacl::NaClBrowser::CACHE_MISS, 3); 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Should have received a cache setting afterwards for IRT and translators. 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectUniqueSample("NaCl.ValidationCache.Set", 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nacl::NaClBrowser::CACHE_HIT, 3); 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Load the same pexe, but with a different cache identity. 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // This means that translation will actually be redone, 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // forcing the translators to be loaded a second time (but now with 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // cache hits!) 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RunLoadTest(FILE_PATH_LITERAL("pnacl_options.html?use_nmf=o_2")); 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Should now have 3 more queries on top of the previous ones. 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectTotalCount("NaCl.ValidationCache.Query", 6); 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // With the 3 extra queries being cache hits. 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectBucketCount("NaCl.ValidationCache.Query", 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nacl::NaClBrowser::CACHE_HIT, 3); 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // No extra cache settings. 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch histograms.ExpectUniqueSample("NaCl.ValidationCache.Set", 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch nacl::NaClBrowser::CACHE_HIT, 3); 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(ncbray) convert the rest of nacl_uma.py (currently in the NaCl repo.) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test validation failures and crashes. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 218a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace 219