00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_AUTOMATIC_PUBLIC_BLINK_FLOW_CRITICAL_LINE_H_
00020 #define NET_INSTAWEB_AUTOMATIC_PUBLIC_BLINK_FLOW_CRITICAL_LINE_H_
00021
00022 #include "base/scoped_ptr.h"
00023 #include "net/instaweb/util/public/basictypes.h"
00024 #include "net/instaweb/util/public/string.h"
00025 #include "net/instaweb/util/public/string_util.h"
00026
00027 namespace net_instaweb {
00028
00029 class AsyncFetch;
00030 class BlinkCriticalLineData;
00031 class BlinkCriticalLineDataFinder;
00032 class PropertyPage;
00033 class ProxyFetchPropertyCallbackCollector;
00034 class ProxyFetchFactory;
00035 class ResourceManager;
00036 class RewriteOptions;
00037 class Statistics;
00038 class TimedVariable;
00039
00043 class BlinkFlowCriticalLine {
00044 public:
00047 static const char kBackgroundComputationDone[];
00048
00049 static void Start(const GoogleString& url,
00050 AsyncFetch* base_fetch,
00051 RewriteOptions* options,
00052 ProxyFetchFactory* factory,
00053 ResourceManager* manager,
00054 ProxyFetchPropertyCallbackCollector* property_callback);
00055
00056 virtual ~BlinkFlowCriticalLine();
00057
00058 static void Initialize(Statistics* statistics);
00059
00060 static const char kAboveTheFold[];
00061 static const char kNumBlinkHtmlCacheHits[];
00062 static const char kNumBlinkHtmlCacheMisses[];
00063 static const char kNumBlinkSharedFetchesStarted[];
00064 static const char kNumBlinkSharedFetchesCompleted[];
00065 static const char kNumComputeBlinkCriticalLineDataCalls[];
00066 static const char kNoScriptRedirectFormatter[];
00067
00068 private:
00069 BlinkFlowCriticalLine(const GoogleString& url,
00070 AsyncFetch* base_fetch,
00071 RewriteOptions* options,
00072 ProxyFetchFactory* factory,
00073 ResourceManager* manager,
00074 ProxyFetchPropertyCallbackCollector* property_callback);
00075
00079 void BlinkCriticalLineDataLookupDone(
00080 ProxyFetchPropertyCallbackCollector* collector);
00081
00084 void BlinkCriticalLineDataHit();
00085
00088 void BlinkCriticalLineDataMiss();
00089
00090 void TriggerProxyFetch(bool critical_line_data_found);
00091
00095 void ServeAllPanelContents();
00096
00100 void ServeCriticalPanelContents();
00101
00103 void SendCriticalHtml(const GoogleString& critical_json_str);
00104
00106 void SendInlineImagesJson(const GoogleString& pushed_images_str);
00107
00109 void SendNonCriticalJson(GoogleString* non_critical_json_str);
00110
00111 void WriteString(const StringPiece& str);
00112
00113 void Flush();
00114
00117 void SetFilterOptions(RewriteOptions* options) const;
00118
00120 bool IsLastResponseCodeInvalid(PropertyPage* page);
00121
00122 GoogleString url_;
00123 GoogleString critical_html_;
00124 AsyncFetch* base_fetch_;
00125 RewriteOptions* options_;
00126 ProxyFetchFactory* factory_;
00127 ResourceManager* manager_;
00128 ProxyFetchPropertyCallbackCollector* property_callback_;
00129 scoped_ptr<BlinkCriticalLineData> blink_critical_line_data_;
00130 BlinkCriticalLineDataFinder* finder_;
00131
00132 TimedVariable* num_blink_html_cache_hits_;
00133 TimedVariable* num_blink_shared_fetches_started_;
00134
00135 DISALLOW_COPY_AND_ASSIGN(BlinkFlowCriticalLine);
00136 };
00137
00138 }
00139
00140 #endif ///< NET_INSTAWEB_AUTOMATIC_PUBLIC_BLINK_FLOW_CRITICAL_LINE_H_