LCOV - code coverage report
Current view: top level - gfx/2d - DrawingJob.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 55 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 14 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
       2             :  * This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #include "DrawingJob.h"
       7             : #include "JobScheduler.h"
       8             : #include "mozilla/gfx/2D.h"
       9             : 
      10             : namespace mozilla {
      11             : namespace gfx {
      12             : 
      13           0 : DrawingJobBuilder::DrawingJobBuilder()
      14           0 : {}
      15             : 
      16           0 : DrawingJobBuilder::~DrawingJobBuilder()
      17             : {
      18           0 :   MOZ_ASSERT(!mDrawTarget);
      19           0 : }
      20             : 
      21             : void
      22           0 : DrawingJob::Clear()
      23             : {
      24           0 :   mCommandBuffer = nullptr;
      25           0 :   mCursor = 0;
      26           0 : }
      27             : 
      28             : void
      29           0 : DrawingJobBuilder::BeginDrawingJob(DrawTarget* aTarget, IntPoint aOffset,
      30             :                                      SyncObject* aStart)
      31             : {
      32           0 :   MOZ_ASSERT(mCommandOffsets.empty());
      33           0 :   MOZ_ASSERT(aTarget);
      34           0 :   mDrawTarget = aTarget;
      35           0 :   mOffset = aOffset;
      36           0 :   mStart = aStart;
      37           0 : }
      38             : 
      39             : DrawingJob*
      40           0 : DrawingJobBuilder::EndDrawingJob(CommandBuffer* aCmdBuffer,
      41             :                                    SyncObject* aCompletion,
      42             :                                    WorkerThread* aPinToWorker)
      43             : {
      44           0 :   MOZ_ASSERT(mDrawTarget);
      45           0 :   DrawingJob* task = new DrawingJob(mDrawTarget, mOffset, mStart, aCompletion, aPinToWorker);
      46           0 :   task->mCommandBuffer = aCmdBuffer;
      47           0 :   task->mCommandOffsets = Move(mCommandOffsets);
      48             : 
      49           0 :   mDrawTarget = nullptr;
      50           0 :   mOffset = IntPoint();
      51           0 :   mStart = nullptr;
      52             : 
      53           0 :   return task;
      54             : }
      55             : 
      56           0 : DrawingJob::DrawingJob(DrawTarget* aTarget, IntPoint aOffset,
      57             :                          SyncObject* aStart, SyncObject* aCompletion,
      58           0 :                          WorkerThread* aPinToWorker)
      59             : : Job(aStart, aCompletion, aPinToWorker)
      60             : , mCommandBuffer(nullptr)
      61             : , mCursor(0)
      62             : , mDrawTarget(aTarget)
      63           0 : , mOffset(aOffset)
      64             : {
      65           0 :   mCommandOffsets.reserve(64);
      66           0 : }
      67             : 
      68             : JobStatus
      69           0 : DrawingJob::Run()
      70             : {
      71           0 :   while (mCursor < mCommandOffsets.size()) {
      72             : 
      73           0 :     const DrawingCommand* cmd = mCommandBuffer->GetDrawingCommand(mCommandOffsets[mCursor]);
      74             : 
      75           0 :     if (!cmd) {
      76           0 :       return JobStatus::Error;
      77             :     }
      78             : 
      79           0 :     cmd->ExecuteOnDT(mDrawTarget);
      80             : 
      81           0 :     ++mCursor;
      82             :   }
      83             : 
      84           0 :   return JobStatus::Complete;
      85             : }
      86             : 
      87           0 : DrawingJob::~DrawingJob()
      88             : {
      89           0 :   Clear();
      90           0 : }
      91             : 
      92             : const DrawingCommand*
      93           0 : CommandBuffer::GetDrawingCommand(ptrdiff_t aId)
      94             : {
      95           0 :   return static_cast<DrawingCommand*>(mStorage.GetStorage(aId));
      96             : }
      97             : 
      98           0 : CommandBuffer::~CommandBuffer()
      99             : {
     100           0 :   mStorage.ForEach([](void* item){
     101           0 :     static_cast<DrawingCommand*>(item)->~DrawingCommand();
     102           0 :   });
     103           0 :   mStorage.Clear();
     104           0 : }
     105             : 
     106             : void
     107           0 : CommandBufferBuilder::BeginCommandBuffer(size_t aBufferSize)
     108             : {
     109           0 :   MOZ_ASSERT(!mCommands);
     110           0 :   mCommands = new CommandBuffer(aBufferSize);
     111           0 : }
     112             : 
     113             : already_AddRefed<CommandBuffer>
     114           0 : CommandBufferBuilder::EndCommandBuffer()
     115             : {
     116           0 :   return mCommands.forget();
     117             : }
     118             : 
     119             : } // namespace
     120             : } // namespace

Generated by: LCOV version 1.13