Page Speed Optimization Libraries
1.8.31.3
|
00001 /* 00002 * Copyright 2012 Google Inc. 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http:///www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00018 00019 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_CRITICAL_IMAGES_FINDER_H_ 00020 #define NET_INSTAWEB_REWRITER_PUBLIC_CRITICAL_IMAGES_FINDER_H_ 00021 00022 #include <map> 00023 #include <utility> 00024 00025 #include "net/instaweb/rewriter/critical_images.pb.h" 00026 #include "net/instaweb/rewriter/public/critical_finder_support_util.h" 00027 #include "net/instaweb/util/public/basictypes.h" 00028 #include "net/instaweb/util/public/property_cache.h" 00029 #include "net/instaweb/util/public/string.h" 00030 #include "net/instaweb/util/public/string_util.h" 00031 00032 namespace net_instaweb { 00033 00034 class GoogleUrl; 00035 class RenderedImages; 00036 class RewriteDriver; 00037 class RewriteOptions; 00038 class Statistics; 00039 class Variable; 00040 00041 typedef std::map<GoogleString, std::pair<int32, int32> > 00042 RenderedImageDimensionsMap; 00043 00052 struct CriticalImagesInfo { 00053 CriticalImagesInfo() 00054 : is_critical_image_info_present(false) {} 00055 StringSet html_critical_images; 00056 StringSet css_critical_images; 00057 CriticalImages proto; 00058 bool is_critical_image_info_present; 00059 RenderedImageDimensionsMap rendered_images_map; 00060 }; 00061 00062 00065 class CriticalImagesFinder { 00066 public: 00067 enum Availability { 00068 kDisabled, 00069 kNoDataYet, 00070 kAvailable, 00071 }; 00072 static const char kCriticalImagesValidCount[]; 00073 static const char kCriticalImagesExpiredCount[]; 00074 static const char kCriticalImagesNotFoundCount[]; 00075 static const char kCriticalImagesPropertyName[]; 00078 static const char kRenderedImageDimensionsProperty[]; 00079 00080 CriticalImagesFinder(const PropertyCache::Cohort* cohort, Statistics* stats); 00081 virtual ~CriticalImagesFinder(); 00082 00083 static void InitStats(Statistics* statistics); 00084 00088 virtual Availability Available(RewriteDriver* driver); 00089 00095 virtual int PercentSeenForCritical() const { 00096 return kDefaultPercentSeenForCritical; 00097 } 00098 00106 virtual int SupportInterval() const { 00107 return kDefaultImageSupportInterval; 00108 } 00109 00115 bool IsHtmlCriticalImage(const GoogleString& image_url, 00116 RewriteDriver* driver); 00117 00118 bool IsCssCriticalImage(const GoogleString& image_url, 00119 RewriteDriver* driver); 00120 00123 bool GetRenderedImageDimensions( 00124 RewriteDriver* driver, 00125 const GoogleUrl& image_src_gurl, 00126 std::pair<int32, int32>* dimensions); 00127 00130 const StringSet& GetHtmlCriticalImages(RewriteDriver* driver); 00131 const StringSet& GetCssCriticalImages(RewriteDriver* driver); 00132 00139 StringSet* mutable_html_critical_images(RewriteDriver* driver); 00140 StringSet* mutable_css_critical_images(RewriteDriver* driver); 00141 00143 virtual void ComputeCriticalImages(RewriteDriver* driver) = 0; 00144 00149 const PropertyCache::Cohort* cohort() const { return cohort_; } 00150 00156 bool UpdateCriticalImagesCacheEntryFromDriver( 00157 const StringSet* html_critical_images_set, 00158 const StringSet* css_critical_images_set, 00159 RewriteDriver* driver); 00160 00165 static bool PopulateCriticalImagesFromPropertyValue( 00166 const PropertyValue* property_value, CriticalImages* critical_images); 00167 00171 static bool UpdateCriticalImagesCacheEntry( 00172 const StringSet* html_critical_images_set, 00173 const StringSet* css_critical_images_set, 00174 const RenderedImages* rendered_images_set, 00175 int support_interval, 00176 const PropertyCache::Cohort* cohort, 00177 AbstractPropertyPage* page); 00178 00181 virtual bool IsCriticalImageInfoPresent(RewriteDriver* driver); 00182 00184 virtual RenderedImages* ExtractRenderedImageDimensionsFromCache( 00185 RewriteDriver* driver); 00186 00188 void AddHtmlCriticalImage(const GoogleString& url, 00189 RewriteDriver* driver); 00190 00193 RenderedImages* JsonMapToRenderedImagesMap(const GoogleString& str, 00194 const RewriteOptions* options); 00195 00198 virtual bool ShouldBeacon(RewriteDriver* driver) { return false; } 00199 00204 virtual BeaconMetadata PrepareForBeaconInsertion(RewriteDriver* driver) { 00205 BeaconMetadata result; 00206 result.status = kBeaconNoNonce; 00207 return result; 00208 } 00209 00215 virtual void UpdateCandidateImagesForBeaconing(const StringSet& images, 00216 RewriteDriver* driver, 00217 bool beaconing) {} 00218 00219 protected: 00222 static bool UpdateAndWriteBackCriticalImagesCacheEntry( 00223 const StringSet* html_critical_images_set, 00224 const StringSet* css_critical_images_set, 00225 const RenderedImages* rendered_images_set, 00226 int support_interval, 00227 const PropertyCache::Cohort* cohort, 00228 AbstractPropertyPage* page, 00229 CriticalImages* critical_images); 00230 00235 virtual void UpdateCriticalImagesSetInDriver(RewriteDriver* driver); 00236 00237 virtual GoogleString GetKeyForUrl(const GoogleString& url) { 00238 return url; 00239 } 00240 00244 CriticalImagesInfo* ExtractCriticalImagesFromCache( 00245 RewriteDriver* driver, 00246 const PropertyValue* property_value); 00247 00248 private: 00249 friend class CriticalImagesFinderTestBase; 00250 00255 static bool UpdateCriticalImages(const StringSet* html_critical_images, 00256 const StringSet* css_critical_images, 00257 int support_interval, 00258 CriticalImages* critical_images); 00259 00262 static const int kDefaultPercentSeenForCritical = 100; 00263 static const int kDefaultImageSupportInterval = 1; 00264 00265 const PropertyCache::Cohort* cohort_; 00266 00267 Variable* critical_images_valid_count_; 00268 Variable* critical_images_expired_count_; 00269 Variable* critical_images_not_found_count_; 00270 00271 DISALLOW_COPY_AND_ASSIGN(CriticalImagesFinder); 00272 }; 00273 00274 } 00275 00276 #endif ///< NET_INSTAWEB_REWRITER_PUBLIC_CRITICAL_IMAGES_FINDER_H_