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

Unified Diff: runtime/vm/dart_api_impl.cc

Issue 2579413002: Revert "Save and restore feedback from JIT." (Closed)
Patch Set: Created 4 years 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 | « runtime/vm/aot_optimizer.cc ('k') | runtime/vm/flow_graph_compiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/dart_api_impl.cc
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 638a4bf8dfed2312441630f99494df03e05262c2..61daa777f0707c8bb892261a75b4ce4fd34818c1 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -36,7 +36,6 @@
#include "vm/port.h"
#include "vm/precompiler.h"
#include "vm/profiler.h"
-#include "vm/program_visitor.h"
#include "vm/resolver.h"
#include "vm/reusable_handles.h"
#include "vm/service_event.h"
@@ -113,9 +112,9 @@ const char* CanonicalFunction(const char* func) {
// An object visitor which will iterate over all the function objects in the
// heap and check if the result type and parameter types are canonicalized
// or not. An assertion is raised if a type is not canonicalized.
-class CheckFunctionTypesVisitor : public ObjectVisitor {
+class FunctionVisitor : public ObjectVisitor {
public:
- explicit CheckFunctionTypesVisitor(Thread* thread)
+ explicit FunctionVisitor(Thread* thread)
: classHandle_(Class::Handle(thread->zone())),
funcHandle_(Function::Handle(thread->zone())),
typeHandle_(AbstractType::Handle(thread->zone())) {}
@@ -1573,7 +1572,7 @@ Dart_CreateSnapshot(uint8_t** vm_isolate_snapshot_buffer,
#if defined(DEBUG)
I->heap()->CollectAllGarbage();
- CheckFunctionTypesVisitor check_canonical(T);
+ FunctionVisitor check_canonical(T);
I->heap()->IterateObjects(&check_canonical);
#endif // #if defined(DEBUG)
@@ -1612,7 +1611,7 @@ static Dart_Handle createLibrarySnapshot(Dart_Handle library,
#if defined(DEBUG)
I->heap()->CollectAllGarbage();
- CheckFunctionTypesVisitor check_canonical(T);
+ FunctionVisitor check_canonical(T);
I->heap()->IterateObjects(&check_canonical);
#endif // #if defined(DEBUG)
@@ -6427,175 +6426,47 @@ DART_EXPORT void Dart_SetThreadName(const char* name) {
}
-DART_EXPORT
-Dart_Handle Dart_SaveJITFeedback(uint8_t** buffer, intptr_t* buffer_length) {
-#if defined(DART_PRECOMPILED_RUNTIME)
- return Api::NewError("No JIT feedback to save on an AOT runtime.");
-#elif defined(PRODUCT)
- // TOOD(rmacnak): We'd need to include the JSON printing code again.
- return Api::NewError("Dart_SaveJITFeedback not supported in PRODUCT mode.");
-#else
- Thread* thread = Thread::Current();
- DARTSCOPE(thread);
- Isolate* isolate = thread->isolate();
- Zone* zone = thread->zone();
+// The precompiler is included in dart_bootstrap and dart_noopt, and
+// excluded from dart and dart_precompiled_runtime.
+#if !defined(DART_PRECOMPILER)
- if (buffer == NULL) {
- RETURN_NULL_ERROR(buffer);
- }
- if (buffer_length == NULL) {
- RETURN_NULL_ERROR(buffer_length);
- }
-
- JSONStream js_stream;
- {
- JSONObject js_profile(&js_stream);
- js_profile.AddProperty("vmVersion", Version::CommitString());
- js_profile.AddProperty("asserts", FLAG_enable_asserts);
- js_profile.AddProperty("typeChecks", FLAG_enable_type_checks);
-
- {
- JSONArray js_scripts(&js_profile, "scripts");
-
- const GrowableObjectArray& libraries = GrowableObjectArray::Handle(
- zone, isolate->object_store()->libraries());
- Library& library = Library::Handle(zone);
- Array& scripts = Array::Handle(zone);
- Script& script = Script::Handle(zone);
- String& uri = String::Handle(zone);
- for (intptr_t i = 0; i < libraries.Length(); i++) {
- library ^= libraries.At(i);
- scripts = library.LoadedScripts();
- for (intptr_t j = 0; j < scripts.Length(); j++) {
- script ^= scripts.At(j);
- JSONObject js_script(&js_scripts);
- uri = script.url();
- js_script.AddProperty("uri", uri.ToCString());
- int64_t fp = script.SourceFingerprint();
- js_script.AddProperty64("checksum", fp);
- }
- }
- }
+DART_EXPORT Dart_Handle
+Dart_Precompile(Dart_QualifiedFunctionName entry_points[], bool reset_fields) {
+ return Api::NewError(
+ "This VM was built without support for AOT compilation.");
+}
- {
- JSONArray js_classes(&js_profile, "classes");
-
- ClassTable* classes = isolate->class_table();
- Class& cls = Class::Handle(zone);
- Library& library = Library::Handle(zone);
- String& uri = String::Handle(zone);
- String& name = String::Handle(zone);
- for (intptr_t cid = kNumPredefinedCids; cid < classes->NumCids(); cid++) {
- if (!classes->HasValidClassAt(cid)) continue;
- cls ^= classes->At(cid);
- library = cls.library();
- JSONObject js_class(&js_classes);
- js_class.AddProperty("cid", cid);
- uri = library.url();
- js_class.AddProperty("uri", uri.ToCString());
- name = cls.Name();
- name = String::RemovePrivateKey(name);
- js_class.AddProperty("name", name.ToCString());
- }
- }
- {
- JSONArray js_functions(&js_profile, "functions");
-
- class JITFeedbackFunctionVisitor : public FunctionVisitor {
- public:
- JITFeedbackFunctionVisitor(JSONArray* js_functions, Zone* zone)
- : js_functions_(js_functions),
- function_(Function::Handle(zone)),
- owner_(Class::Handle(zone)),
- name_(String::Handle(zone)),
- ic_datas_(Array::Handle(zone)),
- ic_data_(ICData::Handle(zone)),
- entry_(Object::Handle(zone)) {}
-
- void Visit(const Function& function) {
- if (function.usage_counter() == 0) return;
-
- JSONObject js_function(js_functions_);
- name_ = function.name();
- name_ = String::RemovePrivateKey(name_);
- js_function.AddProperty("name", name_.ToCString());
- owner_ ^= function.Owner();
- js_function.AddProperty("class", owner_.id());
- js_function.AddProperty("tokenPos", function.token_pos().value());
- js_function.AddProperty("kind",
- static_cast<intptr_t>(function.kind()));
- intptr_t usage = function.usage_counter();
- if (usage < 0) {
- // Function was in the background compiler's queue.
- usage = FLAG_optimization_counter_threshold;
- }
- js_function.AddProperty("usageCounter", usage);
-
- ic_datas_ = function.ic_data_array();
- JSONArray js_icdatas(&js_function, "ics");
- if (ic_datas_.IsNull()) return;
-
- for (intptr_t j = 0; j < ic_datas_.Length(); j++) {
- entry_ = ic_datas_.At(j);
- if (!entry_.IsICData()) continue; // Skip edge counters.
- ic_data_ ^= entry_.raw();
-
- JSONObject js_icdata(&js_icdatas);
- js_icdata.AddProperty("deoptId", ic_data_.deopt_id());
- name_ = ic_data_.target_name();
- name_ = String::RemovePrivateKey(name_);
- js_icdata.AddProperty("selector", name_.ToCString());
- js_icdata.AddProperty("isStaticCall", ic_data_.is_static_call());
- intptr_t num_args_checked = ic_data_.NumArgsTested();
- js_icdata.AddProperty("argsTested", num_args_checked);
- JSONArray js_entries(&js_icdata, "entries");
- for (intptr_t check = 0; check < ic_data_.NumberOfChecks();
- check++) {
- GrowableArray<intptr_t> class_ids(num_args_checked);
- ic_data_.GetClassIdsAt(check, &class_ids);
- for (intptr_t k = 0; k < num_args_checked; k++) {
- ASSERT(class_ids[k] != kIllegalCid);
- js_entries.AddValue(class_ids[k]);
- }
- js_entries.AddValue(ic_data_.GetCountAt(check));
- }
- }
- }
+DART_EXPORT Dart_Handle
+Dart_CreatePrecompiledSnapshotAssembly(uint8_t** assembly_buffer,
+ intptr_t* assembly_size) {
+ return Api::NewError(
+ "This VM was built without support for AOT compilation.");
+ return 0;
+}
- private:
- JSONArray* js_functions_;
- Function& function_;
- Class& owner_;
- String& name_;
- Array& ic_datas_;
- ICData& ic_data_;
- Object& entry_;
- };
-
- JITFeedbackFunctionVisitor visitor(&js_functions, zone);
- ProgramVisitor::VisitFunctions(&visitor);
- }
- }
- js_stream.Steal(reinterpret_cast<char**>(buffer), buffer_length);
- return Api::Success();
-#endif
+DART_EXPORT Dart_Handle
+Dart_CreatePrecompiledSnapshotBlob(uint8_t** vm_isolate_snapshot_buffer,
+ intptr_t* vm_isolate_snapshot_size,
+ uint8_t** isolate_snapshot_buffer,
+ intptr_t* isolate_snapshot_size,
+ uint8_t** instructions_blob_buffer,
+ intptr_t* instructions_blob_size,
+ uint8_t** rodata_blob_buffer,
+ intptr_t* rodata_blob_size) {
+ return Api::NewError(
+ "This VM was built without support for AOT compilation.");
}
+#else // DART_PRECOMPILER
DART_EXPORT Dart_Handle
-Dart_Precompile(Dart_QualifiedFunctionName entry_points[],
- bool reset_fields,
- uint8_t* jit_feedback,
- intptr_t jit_feedback_length) {
+Dart_Precompile(Dart_QualifiedFunctionName entry_points[], bool reset_fields) {
#if defined(TARGET_ARCH_IA32)
- return Api::NewError("AOT compilation is not supported on IA32.");
+ return Api::NewError("Precompilation is not supported on IA32.");
#elif defined(TARGET_ARCH_DBC)
- return Api::NewError("AOT compilation is not supported on DBC.");
-#elif !defined(DART_PRECOMPILER)
- return Api::NewError(
- "This VM was built without support for AOT compilation.");
+ return Api::NewError("Precompilation is not supported on DBC.");
#else
API_TIMELINE_BEGIN_END;
DARTSCOPE(Thread::Current());
@@ -6607,8 +6478,8 @@ Dart_Precompile(Dart_QualifiedFunctionName entry_points[],
return result;
}
CHECK_CALLBACK_STATE(T);
- const Error& error = Error::Handle(Precompiler::CompileAll(
- entry_points, reset_fields, jit_feedback, jit_feedback_length));
+ const Error& error =
+ Error::Handle(Precompiler::CompileAll(entry_points, reset_fields));
if (!error.IsNull()) {
return Api::NewHandle(T, error.raw());
}
@@ -6621,12 +6492,9 @@ DART_EXPORT Dart_Handle
Dart_CreatePrecompiledSnapshotAssembly(uint8_t** assembly_buffer,
intptr_t* assembly_size) {
#if defined(TARGET_ARCH_IA32)
- return Api::NewError("AOT compilation is not supported on IA32.");
+ return Api::NewError("Precompilation is not supported on IA32.");
#elif defined(TARGET_ARCH_DBC)
- return Api::NewError("AOT compilation is not supported on DBC.");
-#elif !defined(DART_PRECOMPILER)
- return Api::NewError(
- "This VM was built without support for AOT compilation.");
+ return Api::NewError("Precompilation is not supported on DBC.");
#else
API_TIMELINE_DURATION;
DARTSCOPE(Thread::Current());
@@ -6672,12 +6540,9 @@ Dart_CreatePrecompiledSnapshotBlob(uint8_t** vm_isolate_snapshot_buffer,
uint8_t** rodata_blob_buffer,
intptr_t* rodata_blob_size) {
#if defined(TARGET_ARCH_IA32)
- return Api::NewError("AOT compilation is not supported on IA32.");
+ return Api::NewError("Precompilation is not supported on IA32.");
#elif defined(TARGET_ARCH_DBC)
- return Api::NewError("AOT compilation is not supported on DBC.");
-#elif !defined(DART_PRECOMPILER)
- return Api::NewError(
- "This VM was built without support for AOT compilation.");
+ return Api::NewError("Precompilation is not supported on DBC.");
#else
API_TIMELINE_DURATION;
DARTSCOPE(Thread::Current());
@@ -6731,6 +6596,7 @@ Dart_CreatePrecompiledSnapshotBlob(uint8_t** vm_isolate_snapshot_buffer,
return Api::Success();
#endif
}
+#endif // DART_PRECOMPILER
DART_EXPORT Dart_Handle Dart_PrecompileJIT() {
« no previous file with comments | « runtime/vm/aot_optimizer.cc ('k') | runtime/vm/flow_graph_compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698