Home | History | Annotate | Download | only in performance
      1 /*
      2  * Copyright (c) 2014, Opera Software ASA. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  * 3. Neither the name of Opera Software ASA nor the names of its
     13  *    contributors may be used to endorse or promote products derived
     14  *    from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     19  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     20  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     21  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     23  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     25  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     27  * OF THE POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 
     30 #include "config.h"
     31 #include "modules/performance/SharedWorkerPerformance.h"
     32 
     33 #include "core/dom/Document.h"
     34 #include "core/dom/ExecutionContext.h"
     35 #include "core/loader/DocumentLoadTiming.h"
     36 #include "core/loader/DocumentLoader.h"
     37 #include "core/workers/SharedWorker.h"
     38 
     39 namespace WebCore {
     40 
     41 SharedWorkerPerformance::SharedWorkerPerformance()
     42     : m_timeOrigin(monotonicallyIncreasingTime())
     43 {
     44 }
     45 
     46 const char* SharedWorkerPerformance::supplementName()
     47 {
     48     return "SharedWorkerPerformance";
     49 }
     50 
     51 SharedWorkerPerformance& SharedWorkerPerformance::from(SharedWorker& sharedWorker)
     52 {
     53     SharedWorkerPerformance* supplement = static_cast<SharedWorkerPerformance*>(WillBeHeapSupplement<SharedWorker>::from(sharedWorker, supplementName()));
     54     if (!supplement) {
     55         supplement = new SharedWorkerPerformance();
     56         provideTo(sharedWorker, supplementName(), adoptPtrWillBeNoop(supplement));
     57     }
     58     return *supplement;
     59 }
     60 
     61 double SharedWorkerPerformance::workerStart(ExecutionContext* context, SharedWorker& sharedWorker)
     62 {
     63     return SharedWorkerPerformance::from(sharedWorker).getWorkerStart(context, sharedWorker);
     64 }
     65 
     66 double SharedWorkerPerformance::getWorkerStart(ExecutionContext* context, SharedWorker&) const
     67 {
     68     ASSERT(context);
     69     ASSERT(context->isDocument());
     70     Document* document = toDocument(context);
     71     if (!document->loader())
     72         return 0;
     73 
     74     double navigationStart = document->loader()->timing()->navigationStart();
     75     return m_timeOrigin - navigationStart;
     76 }
     77 
     78 } // namespace WebCore
     79 
     80