diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/bytecode/ExecutionCounter.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/bytecode/ExecutionCounter.cpp')
-rw-r--r-- | Source/JavaScriptCore/bytecode/ExecutionCounter.cpp | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/Source/JavaScriptCore/bytecode/ExecutionCounter.cpp b/Source/JavaScriptCore/bytecode/ExecutionCounter.cpp index fe4e430f1..3a646a86a 100644 --- a/Source/JavaScriptCore/bytecode/ExecutionCounter.cpp +++ b/Source/JavaScriptCore/bytecode/ExecutionCounter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012, 2014 Apple Inc. All rights reserved. + * Copyright (C) 2012 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,25 +28,21 @@ #include "CodeBlock.h" #include "ExecutableAllocator.h" -#include "JSCInlines.h" #include <wtf/StringExtras.h> namespace JSC { -template<CountingVariant countingVariant> -ExecutionCounter<countingVariant>::ExecutionCounter() +ExecutionCounter::ExecutionCounter() { reset(); } -template<CountingVariant countingVariant> -void ExecutionCounter<countingVariant>::forceSlowPathConcurrently() +void ExecutionCounter::forceSlowPathConcurrently() { m_counter = 0; } -template<CountingVariant countingVariant> -bool ExecutionCounter<countingVariant>::checkIfThresholdCrossedAndSet(CodeBlock* codeBlock) +bool ExecutionCounter::checkIfThresholdCrossedAndSet(CodeBlock* codeBlock) { if (hasCrossedThreshold(codeBlock)) return true; @@ -57,23 +53,21 @@ bool ExecutionCounter<countingVariant>::checkIfThresholdCrossedAndSet(CodeBlock* return false; } -template<CountingVariant countingVariant> -void ExecutionCounter<countingVariant>::setNewThreshold(int32_t threshold, CodeBlock* codeBlock) +void ExecutionCounter::setNewThreshold(int32_t threshold, CodeBlock* codeBlock) { reset(); m_activeThreshold = threshold; setThreshold(codeBlock); } -template<CountingVariant countingVariant> -void ExecutionCounter<countingVariant>::deferIndefinitely() +void ExecutionCounter::deferIndefinitely() { m_totalCount = 0; m_activeThreshold = std::numeric_limits<int32_t>::max(); m_counter = std::numeric_limits<int32_t>::min(); } -double applyMemoryUsageHeuristics(int32_t value, CodeBlock* codeBlock) +double ExecutionCounter::applyMemoryUsageHeuristics(int32_t value, CodeBlock* codeBlock) { #if ENABLE(JIT) double multiplier = @@ -88,7 +82,8 @@ double applyMemoryUsageHeuristics(int32_t value, CodeBlock* codeBlock) return multiplier * value; } -int32_t applyMemoryUsageHeuristicsAndConvertToInt(int32_t value, CodeBlock* codeBlock) +int32_t ExecutionCounter::applyMemoryUsageHeuristicsAndConvertToInt( + int32_t value, CodeBlock* codeBlock) { double doubleResult = applyMemoryUsageHeuristics(value, codeBlock); @@ -100,8 +95,7 @@ int32_t applyMemoryUsageHeuristicsAndConvertToInt(int32_t value, CodeBlock* code return static_cast<int32_t>(doubleResult); } -template<CountingVariant countingVariant> -bool ExecutionCounter<countingVariant>::hasCrossedThreshold(CodeBlock* codeBlock) const +bool ExecutionCounter::hasCrossedThreshold(CodeBlock* codeBlock) const { // This checks if the current count rounded up to the threshold we were targeting. // For example, if we are using half of available executable memory and have @@ -125,17 +119,18 @@ bool ExecutionCounter<countingVariant>::hasCrossedThreshold(CodeBlock* codeBlock return static_cast<double>(m_totalCount) + m_counter >= modifiedThreshold - static_cast<double>( - std::min(m_activeThreshold, maximumExecutionCountsBetweenCheckpoints())) / 2; + std::min(m_activeThreshold, Options::maximumExecutionCountsBetweenCheckpoints())) / 2; } -template<CountingVariant countingVariant> -bool ExecutionCounter<countingVariant>::setThreshold(CodeBlock* codeBlock) +bool ExecutionCounter::setThreshold(CodeBlock* codeBlock) { if (m_activeThreshold == std::numeric_limits<int32_t>::max()) { deferIndefinitely(); return false; } + ASSERT(!m_activeThreshold || !hasCrossedThreshold(codeBlock)); + // Compute the true total count. double trueTotalCount = count(); @@ -164,22 +159,17 @@ bool ExecutionCounter<countingVariant>::setThreshold(CodeBlock* codeBlock) return false; } -template<CountingVariant countingVariant> -void ExecutionCounter<countingVariant>::reset() +void ExecutionCounter::reset() { m_counter = 0; m_totalCount = 0; m_activeThreshold = 0; } -template<CountingVariant countingVariant> -void ExecutionCounter<countingVariant>::dump(PrintStream& out) const +void ExecutionCounter::dump(PrintStream& out) const { out.printf("%lf/%lf, %d", count(), static_cast<double>(m_activeThreshold), m_counter); } -template class ExecutionCounter<CountingForBaseline>; -template class ExecutionCounter<CountingForUpperTiers>; - } // namespace JSC |