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

Unified Diff: src/IceGlobalContext.cpp

Issue 1877873002: Reduce wait times for very large PEXE files. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nit. Created 4 years, 8 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
Index: src/IceGlobalContext.cpp
diff --git a/src/IceGlobalContext.cpp b/src/IceGlobalContext.cpp
index b61873d6a3f8a41600c1763509aaf8e6def73608..fdb56423476bf54cf5d308900e44a121c453a46e 100644
--- a/src/IceGlobalContext.cpp
+++ b/src/IceGlobalContext.cpp
@@ -289,15 +289,25 @@ void GlobalContext::CodeStats::dump(const Cfg *Func, GlobalContext *Ctx) {
}
}
+namespace {
+
+// By default, wake up the main parser thread when the OptQ gets half empty.
+static constexpr size_t DefaultOptQWakeupSize = GlobalContext::MaxOptQSize >> 1;
+
+} // end of anonymous namespace
+
GlobalContext::GlobalContext(Ostream *OsDump, Ostream *OsEmit, Ostream *OsError,
ELFStreamer *ELFStr)
: Strings(new StringPool()), ConstPool(new ConstantPool()), ErrorStatus(),
StrDump(OsDump), StrEmit(OsEmit), StrError(OsError), IntrinsicsInfo(this),
- ObjectWriter(), OptQ(/*Sequential=*/getFlags().isSequential(),
- /*MaxSize=*/
- getFlags().isParseParallel()
- ? MaxOptQSize
- : getFlags().getNumTranslationThreads()),
+ ObjectWriter(),
+ OptQWakeupSize(std::max(DefaultOptQWakeupSize,
+ size_t(getFlags().getNumTranslationThreads()))),
+ OptQ(/*Sequential=*/getFlags().isSequential(),
+ /*MaxSize=*/
+ getFlags().isParseParallel()
+ ? MaxOptQSize
+ : getFlags().getNumTranslationThreads()),
// EmitQ is allowed unlimited size.
EmitQ(/*Sequential=*/getFlags().isSequential()),
DataLowering(TargetDataLowering::createLowering(this)) {
@@ -939,7 +949,7 @@ void GlobalContext::optQueueBlockingPush(std::unique_ptr<OptWorkItem> Item) {
std::unique_ptr<OptWorkItem> GlobalContext::optQueueBlockingPop() {
TimerMarker _(TimerStack::TT_qTransPop, this);
- return std::unique_ptr<OptWorkItem>(OptQ.blockingPop());
+ return OptQ.blockingPop(OptQWakeupSize);
}
void GlobalContext::emitQueueBlockingPush(

Powered by Google App Engine
This is Rietveld 408576698