Revert "[cpu-profiler] Log OSR code when starting the profiler"
This reverts commit f696528189
.
Reason for revert: Test is flaky: https://ci.chromium.org/p/v8/builders/ci/V8%20Linux64/39092
Original change's description:
> [cpu-profiler] Log OSR code when starting the profiler
>
> OSR code doesn't hang off any JSFunction or SFI, so we missed it when
> starting up the profiler. This meant we didn't properly attribute
> ticks to SFI code. The ticks ended up going to the caller instead.
>
> There is a weak cache of OSR code per native context, so iterate that
> on profiler startup and log all the code objects.
>
> Change-Id: I2e9738b86a488b37f36ac89803561607dc76f745
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2414216
> Commit-Queue: Peter Marshall <petermarshall@chromium.org>
> Reviewed-by: Dominik Inführ <dinfuehr@chromium.org>
> Reviewed-by: Mythri Alle <mythria@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#69964}
TBR=mythria@chromium.org,petermarshall@chromium.org,dinfuehr@chromium.org
Change-Id: I1e69f8af88d901bab6f257652d3536d24a4777f9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2415994
Reviewed-by: Peter Marshall <petermarshall@chromium.org>
Commit-Queue: Peter Marshall <petermarshall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69969}
This commit is contained in:
parent
6101e9c2e9
commit
5575bd6621
@ -1528,8 +1528,6 @@ class Heap {
|
||||
|
||||
static Isolate* GetIsolateFromWritableObject(HeapObject object);
|
||||
|
||||
std::vector<Handle<NativeContext>> FindAllNativeContexts();
|
||||
|
||||
private:
|
||||
using ExternalStringTableUpdaterCallback = String (*)(Heap* heap,
|
||||
FullObjectSlot pointer);
|
||||
@ -2021,6 +2019,7 @@ class Heap {
|
||||
V8_EXPORT_PRIVATE void IncrementObjectCounters();
|
||||
#endif // DEBUG
|
||||
|
||||
std::vector<Handle<NativeContext>> FindAllNativeContexts();
|
||||
std::vector<WeakArrayList> FindAllRetainedMaps();
|
||||
MemoryMeasurement* memory_measurement() { return memory_measurement_.get(); }
|
||||
|
||||
|
@ -31,7 +31,6 @@
|
||||
#include "src/logging/log-inl.h"
|
||||
#include "src/logging/log-utils.h"
|
||||
#include "src/objects/api-callbacks.h"
|
||||
#include "src/objects/osr-optimized-code-cache.h"
|
||||
#include "src/profiler/tick-sample.h"
|
||||
#include "src/snapshot/embedded/embedded-data.h"
|
||||
#include "src/strings/string-stream.h"
|
||||
@ -1896,17 +1895,6 @@ static int EnumerateCompiledFunctions(Heap* heap,
|
||||
}
|
||||
}
|
||||
|
||||
for (Handle<NativeContext> native_context : heap->FindAllNativeContexts()) {
|
||||
OSROptimizedCodeCache::Iterator osr_iterator(native_context);
|
||||
for (std::pair<SharedFunctionInfo, Code> sfiCodePair = osr_iterator.Next();
|
||||
!sfiCodePair.first.is_null(); sfiCodePair = osr_iterator.Next()) {
|
||||
AddFunctionAndCode(sfiCodePair.first,
|
||||
AbstractCode::cast(sfiCodePair.second), sfis,
|
||||
code_objects, compiled_funcs_count);
|
||||
++compiled_funcs_count;
|
||||
}
|
||||
}
|
||||
|
||||
return compiled_funcs_count;
|
||||
}
|
||||
|
||||
|
@ -219,24 +219,5 @@ bool OSROptimizedCodeCache::NeedsTrimming(int num_valid_entries,
|
||||
return curr_length > kInitialLength && curr_length > num_valid_entries * 3;
|
||||
}
|
||||
|
||||
OSROptimizedCodeCache::Iterator::Iterator(Handle<NativeContext> native_context)
|
||||
: cache_(native_context->GetOSROptimizedCodeCache(),
|
||||
native_context->GetIsolate()) {}
|
||||
|
||||
std::pair<SharedFunctionInfo, Code> OSROptimizedCodeCache::Iterator::Next() {
|
||||
while (index_ < cache_->length()) {
|
||||
if (cache_->Get(index_ + kSharedOffset)->IsCleared() ||
|
||||
cache_->Get(index_ + kCachedCodeOffset)->IsCleared()) {
|
||||
index_ += kEntryLength;
|
||||
continue;
|
||||
}
|
||||
auto result = std::make_pair(cache_->GetSFIFromEntry(index_),
|
||||
cache_->GetCodeFromEntry(index_));
|
||||
index_ += kEntryLength;
|
||||
return result;
|
||||
}
|
||||
return std::make_pair(SharedFunctionInfo(), Code());
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
} // namespace v8
|
||||
|
@ -48,19 +48,6 @@ class V8_EXPORT OSROptimizedCodeCache : public WeakFixedArray {
|
||||
// Remove all code objects marked for deoptimization from OSR code cache.
|
||||
void EvictMarkedCode(Isolate* isolate);
|
||||
|
||||
// Iterate over all entries in the cache, skipping cleared or null entries.
|
||||
class Iterator {
|
||||
public:
|
||||
explicit Iterator(Handle<NativeContext> native_context);
|
||||
|
||||
// Both results will be null when iteration has finished.
|
||||
std::pair<SharedFunctionInfo, Code> Next();
|
||||
|
||||
private:
|
||||
Handle<OSROptimizedCodeCache> cache_;
|
||||
int index_ = 0; // Index into the FixedArray; a multiple of kEntryLength.
|
||||
};
|
||||
|
||||
private:
|
||||
// Functions that implement heuristics on when to grow / shrink the cache.
|
||||
static int CapacityForLength(int curr_capacity);
|
||||
|
@ -2241,7 +2241,10 @@ static const char* pre_profiling_osr_script = R"(
|
||||
)";
|
||||
|
||||
// Testing profiling of OSR code that was OSR optimized before profiling
|
||||
// started.
|
||||
// started. Currently the behavior is not quite right so we're currently
|
||||
// testing a deopt event being sent to the sampling thread for a function
|
||||
// it knows nothing about. This deopt does mean we start getting samples
|
||||
// for hot so we expect some samples, just fewer than for notHot.
|
||||
//
|
||||
// We should get something like:
|
||||
// 0 (root):0 3 0 #1
|
||||
@ -2250,6 +2253,15 @@ static const char* pre_profiling_osr_script = R"(
|
||||
// 85 hot:5 0 4 #6
|
||||
// 0 whenPass:2 0 4 #3
|
||||
// 0 startProfiling:0 2 0 #4
|
||||
//
|
||||
// But currently get something like:
|
||||
// 0 (root):0 3 0 #1
|
||||
// 12 (garbage collector):0 3 0 #5
|
||||
// 57 notHot:22 0 4 #2
|
||||
// 33 hot:5 0 4 #6
|
||||
// 0 whenPass:2 0 4 #3
|
||||
// 0 startProfiling:0 2 0 #4
|
||||
|
||||
TEST(StartProfilingAfterOsr) {
|
||||
i::FLAG_allow_natives_syntax = true;
|
||||
v8::HandleScope scope(CcTest::isolate());
|
||||
@ -2272,8 +2284,10 @@ TEST(StartProfilingAfterOsr) {
|
||||
const CpuProfileNode* root = profile->GetTopDownRoot();
|
||||
const v8::CpuProfileNode* notHotNode = GetChild(env, root, "notHot");
|
||||
const v8::CpuProfileNode* hotNode = GetChild(env, notHotNode, "hot");
|
||||
|
||||
CHECK_GT(hotNode->GetHitCount(), notHotNode->GetHitCount());
|
||||
USE(hotNode);
|
||||
// If/when OSR sampling is fixed the following CHECK_GT could/should be
|
||||
// uncommented and the node = node line deleted.
|
||||
// CHECK_GT(hotNode->GetHitCount(), notHotNode->GetHitCount());
|
||||
}
|
||||
|
||||
TEST(DontStopOnFinishedProfileDelete) {
|
||||
|
Loading…
Reference in New Issue
Block a user