Page Speed Optimization Libraries  1.6.29.3
net/instaweb/rewriter/public/critical_images_finder.h
Go to the documentation of this file.
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 "net/instaweb/util/public/basictypes.h"
00023 #include "net/instaweb/util/public/property_cache.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 CriticalImages;
00030 class RenderedImages;
00031 class RewriteDriver;
00032 class Statistics;
00033 class Variable;
00034 
00035 
00044 struct CriticalImagesInfo {
00045   CriticalImagesInfo()
00046       : is_critical_image_info_present(false),
00047         is_set_from_split_html(false) {}
00048   StringSet html_critical_images;
00049   StringSet css_critical_images;
00050   bool is_critical_image_info_present;
00051   bool is_set_from_split_html;
00052 };
00053 
00054 
00057 class CriticalImagesFinder {
00058  public:
00059   static const char kCriticalImagesValidCount[];
00060   static const char kCriticalImagesExpiredCount[];
00061   static const char kCriticalImagesNotFoundCount[];
00062   static const char kCriticalImagesPropertyName[];
00065   static const char kRenderedImageDimensionsProperty[];
00066 
00067   explicit CriticalImagesFinder(Statistics* stats);
00068   virtual ~CriticalImagesFinder();
00069 
00070   static void InitStats(Statistics* statistics);
00071 
00075   virtual bool IsMeaningful(const RewriteDriver* driver) const = 0;
00076 
00082   virtual int PercentSeenForCritical() const {
00083     return kDefaultPercentSeenForCritial;
00084   }
00085 
00089   virtual int NumSetsToKeep() const {
00090     return kDefaultNumSetsToKeep;
00091   }
00092 
00098   bool IsHtmlCriticalImage(const GoogleString& image_url,
00099                            RewriteDriver* driver);
00100 
00101   bool IsCssCriticalImage(const GoogleString& image_url,
00102                           RewriteDriver* driver);
00103 
00106   const StringSet& GetHtmlCriticalImages(RewriteDriver* driver);
00107   const StringSet& GetCssCriticalImages(RewriteDriver* driver);
00108 
00115   StringSet* mutable_html_critical_images(RewriteDriver* driver);
00116   StringSet* mutable_css_critical_images(RewriteDriver* driver);
00117 
00119   virtual void ComputeCriticalImages(RewriteDriver* driver) = 0;
00120 
00123   virtual const PropertyCache::Cohort* GetCriticalImagesCohort() const = 0;
00124 
00130   bool UpdateCriticalImagesCacheEntryFromDriver(
00131       const StringSet* html_critical_images_set,
00132       const StringSet* css_critical_images_set,
00133       RewriteDriver* driver);
00134 
00138   static bool UpdateCriticalImagesCacheEntry(
00139       const StringSet* html_critical_images_set,
00140       const StringSet* css_critical_images_set,
00141       int num_sets_to_keep,
00142       int percent_seen_for_critical,
00143       const PropertyCache::Cohort* cohort,
00144       AbstractPropertyPage* page);
00145 
00148   virtual bool IsCriticalImageInfoPresent(RewriteDriver* driver);
00149 
00151   virtual RenderedImages* ExtractRenderedImageDimensionsFromCache(
00152       RewriteDriver* driver);
00153 
00155   void AddHtmlCriticalImage(const GoogleString& url,
00156                             RewriteDriver* driver);
00157 
00158  protected:
00163   virtual void UpdateCriticalImagesSetInDriver(RewriteDriver* driver);
00164 
00165   virtual GoogleString GetKeyForUrl(const GoogleString& url) {
00166     return url;
00167   }
00168 
00172   CriticalImagesInfo* ExtractCriticalImagesFromCache(
00173       RewriteDriver* driver,
00174       const PropertyValue* property_value);
00175 
00176  private:
00177   friend class CriticalImagesFinderTestBase;
00178 
00183   static bool UpdateCriticalImages(const StringSet* html_critical_images,
00184                                    const StringSet* css_critical_images,
00185                                    int num_sets_to_keep,
00186                                    int percent_seen_for_critical,
00187                                    CriticalImages* critical_images);
00188 
00191   static const int kDefaultPercentSeenForCritial = 100;
00192   static const int kDefaultNumSetsToKeep = 1;
00193 
00194   Variable* critical_images_valid_count_;
00195   Variable* critical_images_expired_count_;
00196   Variable* critical_images_not_found_count_;
00197 
00198   DISALLOW_COPY_AND_ASSIGN(CriticalImagesFinder);
00199 };
00200 
00201 }  
00202 
00203 #endif  ///< NET_INSTAWEB_REWRITER_PUBLIC_CRITICAL_IMAGES_FINDER_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines