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

Side by Side Diff: Source/core/timing/MemoryInfo.cpp

Issue 106353005: Expose performance.memory in workers (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@Perf-Memory-SharedWorker
Patch Set: Created 6 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
« no previous file with comments | « Source/core/timing/MemoryInfo.h ('k') | Source/core/timing/Performance.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 13 matching lines...) Expand all
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "core/timing/MemoryInfo.h" 32 #include "core/timing/MemoryInfo.h"
33 33
34 #include "RuntimeEnabledFeatures.h"
34 #include <limits> 35 #include <limits>
35 #include "core/frame/LocalFrame.h" 36 #include "core/frame/LocalFrame.h"
36 #include "core/frame/Settings.h" 37 #include "core/frame/Settings.h"
37 #include "wtf/CurrentTime.h" 38 #include "wtf/CurrentTime.h"
38 #include "wtf/MainThread.h" 39 #include "wtf/MainThread.h"
39 #include "wtf/MathExtras.h" 40 #include "wtf/MathExtras.h"
40 41
41 namespace WebCore { 42 namespace WebCore {
42 43
43 class HeapSizeCache { 44 class HeapSizeCache {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 84
84 // We quantize the sizes to make it more difficult for an attacker to see precis e 85 // We quantize the sizes to make it more difficult for an attacker to see precis e
85 // impact of operations on memory. The values are used for performance tuning, 86 // impact of operations on memory. The values are used for performance tuning,
86 // and hence don't need to be as refined when the value is large, so we threshol d 87 // and hence don't need to be as refined when the value is large, so we threshol d
87 // at a list of exponentially separated buckets. 88 // at a list of exponentially separated buckets.
88 size_t quantizeMemorySize(size_t size) 89 size_t quantizeMemorySize(size_t size)
89 { 90 {
90 const int numberOfBuckets = 100; 91 const int numberOfBuckets = 100;
91 DEFINE_STATIC_LOCAL(Vector<size_t>, bucketSizeList, ()); 92 DEFINE_STATIC_LOCAL(Vector<size_t>, bucketSizeList, ());
92 93
93 ASSERT(isMainThread());
94 if (bucketSizeList.isEmpty()) { 94 if (bucketSizeList.isEmpty()) {
95 bucketSizeList.resize(numberOfBuckets); 95 bucketSizeList.resize(numberOfBuckets);
96 96
97 float sizeOfNextBucket = 10000000.0; // First bucket size is roughly 10M . 97 float sizeOfNextBucket = 10000000.0; // First bucket size is roughly 10M .
98 const float largestBucketSize = 4000000000.0; // Roughly 4GB. 98 const float largestBucketSize = 4000000000.0; // Roughly 4GB.
99 // We scale with the Nth root of the ratio, so that we use all the buckt es. 99 // We scale with the Nth root of the ratio, so that we use all the buckt es.
100 const float scalingFactor = exp(log(largestBucketSize / sizeOfNextBucket ) / numberOfBuckets); 100 const float scalingFactor = exp(log(largestBucketSize / sizeOfNextBucket ) / numberOfBuckets);
101 101
102 size_t nextPowerOfTen = static_cast<size_t>(pow(10, floor(log10(sizeOfNe xtBucket)) + 1) + 0.5); 102 size_t nextPowerOfTen = static_cast<size_t>(pow(10, floor(log10(sizeOfNe xtBucket)) + 1) + 0.5);
103 size_t granularity = nextPowerOfTen / 1000; // We want 3 signficant digi ts. 103 size_t granularity = nextPowerOfTen / 1000; // We want 3 signficant digi ts.
(...skipping 19 matching lines...) Expand all
123 } 123 }
124 124
125 for (int i = 0; i < numberOfBuckets; ++i) { 125 for (int i = 0; i < numberOfBuckets; ++i) {
126 if (size <= bucketSizeList[i]) 126 if (size <= bucketSizeList[i])
127 return bucketSizeList[i]; 127 return bucketSizeList[i];
128 } 128 }
129 129
130 return bucketSizeList[numberOfBuckets - 1]; 130 return bucketSizeList[numberOfBuckets - 1];
131 } 131 }
132 132
133 133 MemoryInfo::MemoryInfo()
134 MemoryInfo::MemoryInfo(LocalFrame* frame)
135 { 134 {
136 ScriptWrappable::init(this); 135 ScriptWrappable::init(this);
137 if (!frame || !frame->settings())
138 return;
139 136
140 if (frame->settings()->preciseMemoryInfoEnabled()) { 137 if (RuntimeEnabledFeatures::preciseMemoryInfoEnabled()) {
141 ScriptGCEvent::getHeapSize(m_info); 138 ScriptGCEvent::getHeapSize(m_info);
142 } else { 139 } else {
143 DEFINE_STATIC_LOCAL(HeapSizeCache, heapSizeCache, ()); 140 DEFINE_STATIC_LOCAL(HeapSizeCache, heapSizeCache, ());
yurys 2014/12/24 08:23:29 HeapSizeCache should become thread-local as it now
144 heapSizeCache.getCachedHeapSize(m_info); 141 heapSizeCache.getCachedHeapSize(m_info);
145 } 142 }
146 } 143 }
147 144
148 } // namespace WebCore 145 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/timing/MemoryInfo.h ('k') | Source/core/timing/Performance.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698