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

Unified Diff: Source/core/page/MemoryInfo.cpp

Issue 26848007: Move Navigation Timing and other various window-level objects out of page/ (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/page/MemoryInfo.h ('k') | Source/core/page/MemoryInfo.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/page/MemoryInfo.cpp
diff --git a/Source/core/page/MemoryInfo.cpp b/Source/core/page/MemoryInfo.cpp
deleted file mode 100644
index b3ec36ad5382c250e8b9a7faffce0dce035f046a..0000000000000000000000000000000000000000
--- a/Source/core/page/MemoryInfo.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/page/MemoryInfo.h"
-
-#include <limits>
-#include "bindings/v8/ScriptGCEvent.h"
-#include "core/page/Frame.h"
-#include "core/page/Settings.h"
-#include "wtf/CurrentTime.h"
-#include "wtf/MainThread.h"
-#include "wtf/MathExtras.h"
-
-namespace WebCore {
-
-
-class HeapSizeCache {
- WTF_MAKE_NONCOPYABLE(HeapSizeCache); WTF_MAKE_FAST_ALLOCATED;
-public:
- HeapSizeCache()
- : m_lastUpdateTime(0)
- {
- }
-
- void getCachedHeapSize(HeapInfo& info)
- {
- maybeUpdate();
- info = m_info;
- }
-
-private:
- void maybeUpdate()
- {
- // We rate-limit queries to once every twenty minutes to make it more difficult
- // for attackers to compare memory usage before and after some event.
- const double TwentyMinutesInSeconds = 20 * 60;
-
- double now = monotonicallyIncreasingTime();
- if (now - m_lastUpdateTime >= TwentyMinutesInSeconds) {
- update();
- m_lastUpdateTime = now;
- }
- }
-
- void update()
- {
- ScriptGCEvent::getHeapSize(m_info);
- m_info.usedJSHeapSize = quantizeMemorySize(m_info.usedJSHeapSize);
- m_info.totalJSHeapSize = quantizeMemorySize(m_info.totalJSHeapSize);
- m_info.jsHeapSizeLimit = quantizeMemorySize(m_info.jsHeapSizeLimit);
- }
-
- double m_lastUpdateTime;
-
- HeapInfo m_info;
-};
-
-// We quantize the sizes to make it more difficult for an attacker to see precise
-// impact of operations on memory. The values are used for performance tuning,
-// and hence don't need to be as refined when the value is large, so we threshold
-// at a list of exponentially separated buckets.
-size_t quantizeMemorySize(size_t size)
-{
- const int numberOfBuckets = 100;
- DEFINE_STATIC_LOCAL(Vector<size_t>, bucketSizeList, ());
-
- ASSERT(isMainThread());
- if (bucketSizeList.isEmpty()) {
- bucketSizeList.resize(numberOfBuckets);
-
- float sizeOfNextBucket = 10000000.0; // First bucket size is roughly 10M.
- const float largestBucketSize = 4000000000.0; // Roughly 4GB.
- // We scale with the Nth root of the ratio, so that we use all the bucktes.
- const float scalingFactor = exp(log(largestBucketSize / sizeOfNextBucket) / numberOfBuckets);
-
- size_t nextPowerOfTen = static_cast<size_t>(pow(10, floor(log10(sizeOfNextBucket)) + 1) + 0.5);
- size_t granularity = nextPowerOfTen / 1000; // We want 3 signficant digits.
-
- for (int i = 0; i < numberOfBuckets; ++i) {
- size_t currentBucketSize = static_cast<size_t>(sizeOfNextBucket);
- bucketSizeList[i] = currentBucketSize - (currentBucketSize % granularity);
-
- sizeOfNextBucket *= scalingFactor;
- if (sizeOfNextBucket >= nextPowerOfTen) {
- if (std::numeric_limits<size_t>::max() / 10 <= nextPowerOfTen)
- nextPowerOfTen = std::numeric_limits<size_t>::max();
- else {
- nextPowerOfTen *= 10;
- granularity *= 10;
- }
- }
-
- // Watch out for overflow, if the range is too large for size_t.
- if (i > 0 && bucketSizeList[i] < bucketSizeList[i - 1])
- bucketSizeList[i] = std::numeric_limits<size_t>::max();
- }
- }
-
- for (int i = 0; i < numberOfBuckets; ++i) {
- if (size <= bucketSizeList[i])
- return bucketSizeList[i];
- }
-
- return bucketSizeList[numberOfBuckets - 1];
-}
-
-
-MemoryInfo::MemoryInfo(Frame* frame)
-{
- ScriptWrappable::init(this);
- if (!frame || !frame->settings())
- return;
-
- if (frame->settings()->memoryInfoEnabled())
- ScriptGCEvent::getHeapSize(m_info);
- else {
- DEFINE_STATIC_LOCAL(HeapSizeCache, heapSizeCache, ());
- heapSizeCache.getCachedHeapSize(m_info);
- }
-}
-
-} // namespace WebCore
« no previous file with comments | « Source/core/page/MemoryInfo.h ('k') | Source/core/page/MemoryInfo.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698