public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Bob Feng" <bob.c.feng@intel.com>
To: devel@edk2.groups.io
Cc: Liming Gao <liming.gao@intel.com>, Bob Feng <bob.c.feng@intel.com>
Subject: [Patch 10/10 V3] BaseTools: Enable block queue log agent.
Date: Tue, 23 Jul 2019 11:58:18 +0800	[thread overview]
Message-ID: <20190723035818.21112-11-bob.c.feng@intel.com> (raw)
In-Reply-To: <20190723035818.21112-1-bob.c.feng@intel.com>

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1875

To support Ctrl+S and Ctrl+Q, we enable block queue
for log.

Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Bob Feng <bob.c.feng@intel.com>
---
 BaseTools/Source/Python/Common/EdkLogger.py | 10 ++++++----
 BaseTools/Source/Python/build/build.py      |  8 +++++---
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/BaseTools/Source/Python/Common/EdkLogger.py b/BaseTools/Source/Python/Common/EdkLogger.py
index 15fd1458a95a..06da4a9d0a1d 100644
--- a/BaseTools/Source/Python/Common/EdkLogger.py
+++ b/BaseTools/Source/Python/Common/EdkLogger.py
@@ -93,11 +93,13 @@ except:
             """
             try:
                 self.enqueue(self.prepare(record))
             except Exception:
                 self.handleError(record)
-
+class BlockQueueHandler(QueueHandler):
+    def enqueue(self, record):
+        self.queue.put(record,True)
 ## Log level constants
 DEBUG_0 = 1
 DEBUG_1 = 2
 DEBUG_2 = 3
 DEBUG_3 = 4
@@ -290,23 +292,23 @@ def LogClientInitialize(log_q):
     # Since we use different format to log different levels of message into different
     # place (stdout or stderr), we have to use different "Logger" objects to do this.
     #
     # For DEBUG level (All DEBUG_0~9 are applicable)
     _DebugLogger.setLevel(INFO)
-    _DebugChannel = QueueHandler(log_q)
+    _DebugChannel = BlockQueueHandler(log_q)
     _DebugChannel.setFormatter(_DebugFormatter)
     _DebugLogger.addHandler(_DebugChannel)
 
     # For VERBOSE, INFO, WARN level
     _InfoLogger.setLevel(INFO)
-    _InfoChannel = QueueHandler(log_q)
+    _InfoChannel = BlockQueueHandler(log_q)
     _InfoChannel.setFormatter(_InfoFormatter)
     _InfoLogger.addHandler(_InfoChannel)
 
     # For ERROR level
     _ErrorLogger.setLevel(INFO)
-    _ErrorCh = QueueHandler(log_q)
+    _ErrorCh = BlockQueueHandler(log_q)
     _ErrorCh.setFormatter(_ErrorFormatter)
     _ErrorLogger.addHandler(_ErrorCh)
 
 ## Set log level
 #
diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py
index 4125b2832946..603d3aa6dad4 100644
--- a/BaseTools/Source/Python/build/build.py
+++ b/BaseTools/Source/Python/build/build.py
@@ -2046,14 +2046,15 @@ class Build():
                     for m in Pa.GetAllModuleInfo:
                         mqueue.put(m)
                     data_pipe_file = os.path.join(Pa.BuildDir, "GlobalVar_%s_%s.bin" % (str(Pa.Guid),Pa.Arch))
                     Pa.DataPipe.dump(data_pipe_file)
                     autogen_rt = self.StartAutoGen(mqueue, Pa.DataPipe, self.SkipAutoGen, PcdMaList,self.share_data)
-                    self.Progress.Stop("done!")
-                    self.AutoGenTime += int(round((time.time() - AutoGenStart)))
+
                     if not autogen_rt:
                         return
+                self.AutoGenTime += int(round((time.time() - AutoGenStart)))
+                self.Progress.Stop("done!")
                 for Arch in Wa.ArchList:
                     MakeStart = time.time()
                     for Ma in BuildModules:
                         # Generate build task for the module
                         if not Ma.IsBinaryModule:
@@ -2294,17 +2295,18 @@ def LogBuildTime(Time):
 # if it's executed successfully or not.
 #
 #   @retval 0     Tool was successful
 #   @retval 1     Tool failed
 #
+LogQMaxSize = 60
 def Main():
     StartTime = time.time()
 
     #
     # Create a log Queue
     #
-    LogQ = mp.Queue()
+    LogQ = mp.Queue(LogQMaxSize)
     # Initialize log system
     EdkLogger.LogClientInitialize(LogQ)
     GlobalData.gCommand = sys.argv[1:]
     #
     # Parse the options and args
-- 
2.20.1.windows.1


  parent reply	other threads:[~2019-07-23  3:58 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-23  3:58 [Patch 00/10 V3] Enable multiple process AutoGen Bob Feng
2019-07-23  3:58 ` [Patch 01/10 V3] BaseTools: Singleton the object to handle build conf file Bob Feng
2019-07-23  3:58 ` [Patch 02/10 V3] BaseTools: Split WorkspaceAutoGen._InitWorker into multiple functions Bob Feng
2019-07-23  3:58 ` [Patch 03/10 V3] BaseTools: Add functions to get platform scope build options Bob Feng
2019-07-23  3:58 ` [Patch 04/10 V3] BaseTools: Decouple AutoGen Objects Bob Feng
2019-07-23  3:58 ` [Patch 05/10 V3] BaseTools: Enable Multiple Process AutoGen Bob Feng
2019-07-23  3:58 ` [Patch 06/10 V3] BaseTools: Add shared data for processes Bob Feng
2019-07-23  3:58 ` [Patch 07/10 V3] BaseTools: Add LogAgent to support multiple process Autogen Bob Feng
2019-07-23  3:58 ` [Patch 08/10 V3] BaseTools: Move BuildOption parser out of build.py Bob Feng
2019-07-23  3:58 ` [Patch 09/10 V3] BaseTools: Add the support for python 2 Bob Feng
2019-07-23  3:58 ` Bob Feng [this message]
2019-07-23 10:11   ` [edk2-devel] [Patch 10/10 V3] BaseTools: Enable block queue log agent Laszlo Ersek
2019-07-23 12:00     ` Bob Feng
2019-07-23 11:30 ` [edk2-devel] [Patch 00/10 V3] Enable multiple process AutoGen Laszlo Ersek
2019-07-30 13:38   ` Bob Feng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190723035818.21112-11-bob.c.feng@intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox