LCOV - code coverage report
Current view: top level - widget/gtk - WidgetTraceEvent.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 29 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* This Source Code Form is subject to the terms of the Mozilla Public
       2             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       3             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       4             : 
       5             : #include "mozilla/WidgetTraceEvent.h"
       6             : 
       7             : #include <glib.h>
       8             : #include <mozilla/CondVar.h>
       9             : #include <mozilla/Mutex.h>
      10             : #include <stdio.h>
      11             : 
      12             : using mozilla::CondVar;
      13             : using mozilla::Mutex;
      14             : using mozilla::MutexAutoLock;
      15             : 
      16             : namespace {
      17             : 
      18             : Mutex* sMutex = nullptr;
      19             : CondVar* sCondVar = nullptr;
      20             : bool sTracerProcessed = false;
      21             : 
      22             : // This function is called from the main (UI) thread.
      23           0 : gboolean TracerCallback(gpointer data)
      24             : {
      25           0 :   mozilla::SignalTracerThread();
      26           0 :   return FALSE;
      27             : }
      28             : 
      29             : } // namespace
      30             : 
      31             : namespace mozilla {
      32             : 
      33           0 : bool InitWidgetTracing()
      34             : {
      35           0 :   sMutex = new Mutex("Event tracer thread mutex");
      36           0 :   sCondVar = new CondVar(*sMutex, "Event tracer thread condvar");
      37           0 :   return true;
      38             : }
      39             : 
      40           0 : void CleanUpWidgetTracing()
      41             : {
      42           0 :   delete sMutex;
      43           0 :   delete sCondVar;
      44           0 :   sMutex = nullptr;
      45           0 :   sCondVar = nullptr;
      46           0 : }
      47             : 
      48             : // This function is called from the background tracer thread.
      49           0 : bool FireAndWaitForTracerEvent()
      50             : {
      51           0 :   MOZ_ASSERT(sMutex && sCondVar, "Tracing not initialized!");
      52             : 
      53             :   // Send a default-priority idle event through the
      54             :   // event loop, and wait for it to finish.
      55           0 :   MutexAutoLock lock(*sMutex);
      56           0 :   MOZ_ASSERT(!sTracerProcessed, "Tracer synchronization state is wrong");
      57             :   g_idle_add_full(G_PRIORITY_DEFAULT,
      58             :                   TracerCallback,
      59             :                   nullptr,
      60           0 :                   nullptr);
      61           0 :   while (!sTracerProcessed)
      62           0 :     sCondVar->Wait();
      63           0 :   sTracerProcessed = false;
      64           0 :   return true;
      65             : }
      66             : 
      67           0 : void SignalTracerThread()
      68             : {
      69           0 :   if (!sMutex || !sCondVar)
      70           0 :     return;
      71           0 :   MutexAutoLock lock(*sMutex);
      72           0 :   if (!sTracerProcessed) {
      73           0 :     sTracerProcessed = true;
      74           0 :     sCondVar->Notify();
      75             :   }
      76             : }
      77             : 
      78             : } // namespace mozilla

Generated by: LCOV version 1.13