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

Unified Diff: runtime/vm/isolate_reload.cc

Issue 2201093002: Make all reload zone allocations use the same zone (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: rasd Created 4 years, 4 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 | « runtime/vm/isolate_reload.h ('k') | runtime/vm/object_reload.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/isolate_reload.cc
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 8825cf76282073df4dde687e640baee1db3f2fc0..8de0e283f0feaaba3299f70889c3ee964d24bbd3 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -47,11 +47,11 @@ DEFINE_FLAG(bool, check_reloaded, false,
#name)
-InstanceMorpher::InstanceMorpher(const Class& from, const Class& to)
+InstanceMorpher::InstanceMorpher(Zone* zone, const Class& from, const Class& to)
: from_(from), to_(to), mapping_() {
ComputeMapping();
- before_ = new ZoneGrowableArray<const Instance*>();
- after_ = new ZoneGrowableArray<const Instance*>();
+ before_ = new ZoneGrowableArray<const Instance*>(zone, 0);
+ after_ = new ZoneGrowableArray<const Instance*>(zone, 0);
ASSERT(from_.id() == to_.id());
cid_ = from_.id();
}
@@ -216,7 +216,7 @@ void ClassReasonForCancelling::AppendTo(JSONArray* array) {
RawError* IsolateReloadContext::error() const {
- ASSERT(has_error());
+ ASSERT(reload_aborted());
// Report the first error to the surroundings.
const Error& error =
Error::Handle(reasons_to_cancel_reload_.At(0)->ToError());
@@ -359,10 +359,12 @@ bool IsolateReloadContext::IsSameLibrary(
IsolateReloadContext::IsolateReloadContext(Isolate* isolate,
JSONStream* js)
- : start_time_micros_(OS::GetCurrentMonotonicMicros()),
+ : zone_(Thread::Current()->zone()),
+ start_time_micros_(OS::GetCurrentMonotonicMicros()),
reload_timestamp_(OS::GetCurrentTimeMillis()),
isolate_(isolate),
reload_skipped_(false),
+ reload_aborted_(false),
js_(js),
saved_num_cids_(-1),
saved_class_table_(NULL),
@@ -384,6 +386,7 @@ IsolateReloadContext::IsolateReloadContext(Isolate* isolate,
// NOTE: DO NOT ALLOCATE ANY RAW OBJECTS HERE. The IsolateReloadContext is not
// associated with the isolate yet and if a GC is triggered here the raw
// objects will not be properly accounted for.
+ ASSERT(zone_ != NULL);
}
@@ -409,8 +412,8 @@ void IsolateReloadContext::ReportSuccess() {
class Aborted : public ReasonForCancelling {
public:
- explicit Aborted(const Error& error)
- : ReasonForCancelling(), error_(error) { }
+ explicit Aborted(Zone* zone, const Error& error)
+ : ReasonForCancelling(zone), error_(error) { }
private:
const Error& error_;
@@ -422,7 +425,8 @@ class Aborted : public ReasonForCancelling {
};
-void IsolateReloadContext::StartReload(bool force_reload) {
+// NOTE: This function returns *after* FinalizeLoading is called.
+void IsolateReloadContext::Reload(bool force_reload) {
TIMELINE_SCOPE(Reload);
Thread* thread = Thread::Current();
ASSERT(isolate() == thread->isolate());
@@ -486,7 +490,7 @@ void IsolateReloadContext::StartReload(bool force_reload) {
}
if (result.IsError()) {
const Error& error = Error::Cast(result);
- AddReasonForCancelling(new Aborted(error));
+ AddReasonForCancelling(new Aborted(zone_, error));
}
}
@@ -517,7 +521,8 @@ void IsolateReloadContext::RegisterClass(const Class& new_cls) {
}
-void IsolateReloadContext::FinishReload() {
+// FinalizeLoading will be called *before* Reload() returns.
+void IsolateReloadContext::FinalizeLoading() {
if (reload_skipped_) {
return;
}
@@ -543,6 +548,7 @@ void IsolateReloadContext::FinishReload() {
BackgroundCompiler::Enable();
+ reload_aborted_ = HasReasonsForCancelling();
ReportOnJSON(js_);
}
@@ -580,7 +586,7 @@ void IsolateReloadContext::ReportOnJSON(JSONStream* stream) {
void IsolateReloadContext::AbortReload(const Error& error) {
- AddReasonForCancelling(new Aborted(error));
+ AddReasonForCancelling(new Aborted(zone_, error));
ReportReasonsForCancelling();
Rollback();
}
@@ -722,10 +728,10 @@ BitVector* IsolateReloadContext::FindModifiedLibraries(bool force_reload) {
// Construct the imported-by graph.
ZoneGrowableArray<ZoneGrowableArray<intptr_t>* >* imported_by =
- new ZoneGrowableArray<ZoneGrowableArray<intptr_t>* >(num_libs);
+ new ZoneGrowableArray<ZoneGrowableArray<intptr_t>* >(zone_, num_libs);
imported_by->SetLength(num_libs);
for (intptr_t i = 0; i < num_libs; i++) {
- (*imported_by)[i] = new ZoneGrowableArray<intptr_t>();
+ (*imported_by)[i] = new ZoneGrowableArray<intptr_t>(zone_, 0);
}
Array& ports = Array::Handle();
Namespace& ns = Namespace::Handle();
@@ -1217,7 +1223,7 @@ void IsolateReloadContext::MorphInstances() {
bool IsolateReloadContext::ValidateReload() {
TIMELINE_SCOPE(ValidateReload);
- if (has_error()) return false;
+ if (reload_aborted()) return false;
// Validate libraries.
{
« no previous file with comments | « runtime/vm/isolate_reload.h ('k') | runtime/vm/object_reload.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698