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

Unified Diff: src/IceBrowserCompileServer.h

Issue 997773002: Refactor Subzero initialization and add a browser callback handler. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Add argv note Created 5 years, 9 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 | « Makefile.standalone ('k') | src/IceBrowserCompileServer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceBrowserCompileServer.h
diff --git a/src/IceBrowserCompileServer.h b/src/IceBrowserCompileServer.h
new file mode 100644
index 0000000000000000000000000000000000000000..034a1af4cf856f44586549f39d49ea2a7031e7a2
--- /dev/null
+++ b/src/IceBrowserCompileServer.h
@@ -0,0 +1,95 @@
+//===- subzero/src/IceBrowserCompileServer.h - Browser server ---*- C++ -*-===//
+//
+// The Subzero Code Generator
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the browser-specific compile server.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SUBZERO_SRC_ICEBROWSERCOMPILESERVER_H
+#define SUBZERO_SRC_ICEBROWSERCOMPILESERVER_H
+
+#include <thread>
+
+#include "IceClFlags.h"
+#include "IceClFlagsExtra.h"
+#include "IceCompileServer.h"
+#include "IceDefs.h"
+#include "IceELFStreamer.h"
+
+namespace llvm {
+class QueueStreamer;
+class raw_fd_ostream;
+};
+
+namespace Ice {
+
+// The browser variant of the compile server.
+// Compared to the commandline version, this version gets compile
+// requests over IPC. Each compile request will have a slimmed down
+// version of argc, argv while other flags are set to defaults that
+// make sense in the browser case. The output file is specified via
+// a posix FD, and input bytes are pushed to the server.
+class BrowserCompileServer : public CompileServer {
+ BrowserCompileServer() = delete;
+ BrowserCompileServer(const BrowserCompileServer &) = delete;
+ BrowserCompileServer &operator=(const BrowserCompileServer &) = delete;
+
+public:
+ explicit BrowserCompileServer(Compiler &Comp)
+ : CompileServer(Comp), InputStream(nullptr) {}
+
+ ~BrowserCompileServer() final;
+
+ void run() final;
+
+ // Parse and set up the flags for compile jobs.
+ void getParsedFlags(uint32_t NumThreads, int argc, char **argv);
+
+ // Creates the streams + context and starts the compile thread,
+ // handing off the streams + context.
+ void startCompileThread(int OutFD);
+
+ // Call to push more bytes to the current input stream.
+ // Returns false on success and true on error.
+ bool pushInputBytes(const void *Data, size_t NumBytes);
+
+ // Notify the input stream of EOF.
+ void endInputStream();
+
+ // Wait for the compile thread to complete then reset the state.
+ void waitForCompileThread() {
+ CompileThread.join();
+ LastError.assign(Ctx->getErrorStatus()->value());
+ // Reset some state. The InputStream is deleted by the compiler
+ // so only reset this to nullptr. Free and flush the rest
+ // of the streams.
+ InputStream = nullptr;
+ EmitStream.reset(nullptr);
+ ELFStream.reset(nullptr);
+ }
+
+private:
+ // This currently only handles a single compile request, hence one copy
+ // of the state.
+ std::unique_ptr<GlobalContext> Ctx;
+ // A borrowed reference to the current InputStream. The compiler owns
+ // the actual reference so the server must be careful not to access
+ // after the compiler is done.
+ llvm::QueueStreamer *InputStream;
+ std::unique_ptr<Ostream> LogStream;
+ std::unique_ptr<llvm::raw_fd_ostream> EmitStream;
+ std::unique_ptr<ELFStreamer> ELFStream;
+ ClFlags Flags;
+ ClFlagsExtra ExtraFlags;
+ std::thread CompileThread;
+};
+
+} // end of namespace Ice
+
+#endif // SUBZERO_SRC_ICEBROWSERCOMPILESERVER_H
« no previous file with comments | « Makefile.standalone ('k') | src/IceBrowserCompileServer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698