Exemplo n.º 1
0
void PerformanceBase::addLongTaskTiming(double startTime,
                                        double endTime,
                                        const String& name,
                                        const String& culpritFrameSrc,
                                        const String& culpritFrameId,
                                        const String& culpritFrameName) {
  if (!hasObserverFor(PerformanceEntry::LongTask))
    return;
  PerformanceEntry* entry = PerformanceLongTaskTiming::create(
      monotonicTimeToDOMHighResTimeStampInMillis(startTime),
      monotonicTimeToDOMHighResTimeStampInMillis(endTime), name,
      culpritFrameSrc, culpritFrameId, culpritFrameName);
  notifyObserversOfEntry(*entry);
}
Exemplo n.º 2
0
void PerformanceBase::addResourceTiming(const ResourceTimingInfo& info) {
  if (isResourceTimingBufferFull() &&
      !hasObserverFor(PerformanceEntry::Resource))
    return;
  SecurityOrigin* securityOrigin = nullptr;
  ExecutionContext* context = getExecutionContext();
  if (context)
    securityOrigin = context->getSecurityOrigin();
  if (!securityOrigin)
    return;

  const ResourceResponse& finalResponse = info.finalResponse();
  bool allowTimingDetails =
      passesTimingAllowCheck(finalResponse, *securityOrigin,
                             info.originalTimingAllowOrigin(), context);
  double startTime = info.initialTime();

  if (info.redirectChain().isEmpty()) {
    PerformanceEntry* entry = PerformanceResourceTiming::create(
        info, timeOrigin(), startTime, allowTimingDetails);
    notifyObserversOfEntry(*entry);
    if (!isResourceTimingBufferFull())
      addResourceTimingBuffer(*entry);
    return;
  }

  const Vector<ResourceResponse>& redirectChain = info.redirectChain();
  bool allowRedirectDetails = allowsTimingRedirect(redirectChain, finalResponse,
                                                   *securityOrigin, context);

  if (!allowRedirectDetails) {
    ResourceLoadTiming* finalTiming = finalResponse.resourceLoadTiming();
    ASSERT(finalTiming);
    if (finalTiming)
      startTime = finalTiming->requestTime();
  }

  ResourceLoadTiming* lastRedirectTiming =
      redirectChain.back().resourceLoadTiming();
  ASSERT(lastRedirectTiming);
  double lastRedirectEndTime = lastRedirectTiming->receiveHeadersEnd();

  PerformanceEntry* entry = PerformanceResourceTiming::create(
      info, timeOrigin(), startTime, lastRedirectEndTime, allowTimingDetails,
      allowRedirectDetails);
  notifyObserversOfEntry(*entry);
  if (!isResourceTimingBufferFull())
    addResourceTimingBuffer(*entry);
}
Exemplo n.º 3
0
 bool hasPerformanceObserverFor(PerformanceEntry::EntryType entryType) {
   return hasObserverFor(entryType);
 }