Page Speed Optimization Libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Friends | List of all members
net_instaweb::CriticalImagesFinder Class Referenceabstract

#include "critical_images_finder.h"

Inheritance diagram for net_instaweb::CriticalImagesFinder:
net_instaweb::BeaconCriticalImagesFinder net_instaweb::TestCriticalImagesFinder net_instaweb::MockCriticalImagesFinder

Public Types

enum  Availability { kDisabled, kNoDataYet, kAvailable }

Public Member Functions

 CriticalImagesFinder (const PropertyCache::Cohort *cohort, Statistics *stats)
virtual Availability Available (RewriteDriver *driver)
virtual int PercentSeenForCritical () const
virtual int SupportInterval () const
bool IsHtmlCriticalImage (StringPiece image_url, RewriteDriver *driver)
bool IsCssCriticalImage (StringPiece image_url, RewriteDriver *driver)
bool GetRenderedImageDimensions (RewriteDriver *driver, const GoogleUrl &image_src_gurl, std::pair< int32, int32 > *dimensions)
const StringSet & GetHtmlCriticalImages (RewriteDriver *driver)
const StringSet & GetCssCriticalImages (RewriteDriver *driver)
StringSet * mutable_html_critical_images (RewriteDriver *driver)
StringSet * mutable_css_critical_images (RewriteDriver *driver)
virtual void ComputeCriticalImages (RewriteDriver *driver)=0
 Compute the critical images for the driver's url.
const PropertyCache::Cohortcohort () const
bool UpdateCriticalImagesCacheEntryFromDriver (const StringSet *html_critical_images_set, const StringSet *css_critical_images_set, RewriteDriver *driver)
virtual bool IsCriticalImageInfoPresent (RewriteDriver *driver)
virtual RenderedImages * ExtractRenderedImageDimensionsFromCache (RewriteDriver *driver)
 Extracts rendered images' dimensions from property cache.
void AddHtmlCriticalImage (const GoogleString &url, RewriteDriver *driver)
 Adds the given url to the html critical image set for the driver.
RenderedImages * JsonMapToRenderedImagesMap (const GoogleString &str, const RewriteOptions *options)
virtual bool ShouldBeacon (RewriteDriver *driver)
virtual BeaconMetadata PrepareForBeaconInsertion (RewriteDriver *driver)
virtual void UpdateCandidateImagesForBeaconing (const StringSet &images, RewriteDriver *driver, bool beaconing)

Static Public Member Functions

static void InitStats (Statistics *statistics)
static bool PopulateCriticalImagesFromPropertyValue (const PropertyValue *property_value, CriticalImages *critical_images)
static bool UpdateCriticalImagesCacheEntry (const StringSet *html_critical_images_set, const StringSet *css_critical_images_set, const RenderedImages *rendered_images_set, int support_interval, const PropertyCache::Cohort *cohort, AbstractPropertyPage *page)

Static Public Attributes

static const char kCriticalImagesValidCount []
static const char kCriticalImagesExpiredCount []
static const char kCriticalImagesNotFoundCount []
static const char kCriticalImagesPropertyName []
static const char kRenderedImageDimensionsProperty []

Protected Member Functions

virtual void UpdateCriticalImagesSetInDriver (RewriteDriver *driver)
virtual GoogleString GetKeyForUrl (StringPiece url)
CriticalImagesInfoExtractCriticalImagesFromCache (RewriteDriver *driver, const PropertyValue *property_value)

Static Protected Member Functions

static bool UpdateAndWriteBackCriticalImagesCacheEntry (const StringSet *html_critical_images_set, const StringSet *css_critical_images_set, const RenderedImages *rendered_images_set, int support_interval, const PropertyCache::Cohort *cohort, AbstractPropertyPage *page, CriticalImages *critical_images)


class CriticalImagesFinderTestBase

Detailed Description

Finds critical images i.e. images which are above the fold for a given url. This information may be used by DelayImagesFilter.

Member Enumeration Documentation


Data will never be forthcoming.


Data is expected but we don't have it yet.


Data is available.

Member Function Documentation

virtual Availability net_instaweb::CriticalImagesFinder::Available ( RewriteDriver driver)

Checks whether IsHtmlCriticalImage will return meaningful results about critical images. Users of IsHtmlCriticalImage should check this function and supply default behaviors when Available != kAvailable.

Reimplemented in net_instaweb::MockCriticalImagesFinder, net_instaweb::BeaconCriticalImagesFinder, and net_instaweb::TestCriticalImagesFinder.

const PropertyCache::Cohort* net_instaweb::CriticalImagesFinder::cohort ( ) const

Identifies which cohort in the PropertyCache the critical image information is located in.

TODO(jud): Make this protected. There is a lingering public usage in
CriticalImagesInfo* net_instaweb::CriticalImagesFinder::ExtractCriticalImagesFromCache ( RewriteDriver driver,
const PropertyValue property_value 

Extracts the critical images from the given property_value into critical_images_info, after checking if the property value is still valid using the provided TTL. It also updates stats variables.

const StringSet& net_instaweb::CriticalImagesFinder::GetHtmlCriticalImages ( RewriteDriver driver)

Get the critical image sets. Returns an empty set if there is no critical image information.

bool net_instaweb::CriticalImagesFinder::GetRenderedImageDimensions ( RewriteDriver driver,
const GoogleUrl image_src_gurl,
std::pair< int32, int32 > *  dimensions 

Returns true if rendered dimensions exist for the image_src_url and populates dimensions in the std::pair.

virtual bool net_instaweb::CriticalImagesFinder::IsCriticalImageInfoPresent ( RewriteDriver driver)

Returns true if the critical images are available, false otherwise. This is virtual only to be overridden in tests.

Reimplemented in net_instaweb::MockCriticalImagesFinder.

bool net_instaweb::CriticalImagesFinder::IsHtmlCriticalImage ( StringPiece  image_url,
RewriteDriver driver 

Checks whether the requested image is present in the critical set or not. Users of this function should also check Available() to see if the implementation of this function returns meaningful results and provide a default behavior if it does not. If no critical set value has been obtained, returns false (not critical).

TODO(jud): It would be simpler to modify these interfaces to take HtmlElement* instead of GoogleStrings. This would move some complexity in getting the correct URL from the caller into this function. For instance, if an image has been modified by LazyloadImages then the actual src we want to check is in the data-pagespeed-lazy-src attribute, not in src.
RenderedImages* net_instaweb::CriticalImagesFinder::JsonMapToRenderedImagesMap ( const GoogleString str,
const RewriteOptions options 

Parses Json map returned from beacon js and populates RenderedImages proto. Caller takes ownership of the returned pointer.

StringSet* net_instaweb::CriticalImagesFinder::mutable_html_critical_images ( RewriteDriver driver)

Utility functions for manually setting the critical image sets. These should only be used by unit tests that need to setup a specific set of critical images. For normal users of CriticalImagesFinder, the critical images will be populated from entries in the property cache. Note that these always return a non-NULL StringSet value (implying "beacon result received").

virtual int net_instaweb::CriticalImagesFinder::PercentSeenForCritical ( ) const

In order to handle varying critical image sets returned by the beacon, we store a history of the last N critical images, and only declare an image critical if it appears critical in the last M out of N sets reported. This function returns what percentage of the sets need to include the image for it be considered critical.

Reimplemented in net_instaweb::BeaconCriticalImagesFinder.

static bool net_instaweb::CriticalImagesFinder::PopulateCriticalImagesFromPropertyValue ( const PropertyValue property_value,
CriticalImages *  critical_images 

Setup the HTML and CSS critical image sets in critical_images_info from the property_value. Return true if property_value had a value, and deserialization of it succeeded. Here because helper code needs access to it.

virtual BeaconMetadata net_instaweb::CriticalImagesFinder::PrepareForBeaconInsertion ( RewriteDriver driver)

Check property cache state and prepare to insert beacon. Returns the metadata where result.status == kDoNotBeacon if no beaconing should occur, and result.nonce contains the nonce if required (default implementation always beacons without a nonce).

Reimplemented in net_instaweb::BeaconCriticalImagesFinder.

virtual bool net_instaweb::CriticalImagesFinder::ShouldBeacon ( RewriteDriver driver)

Returns true if it's time to inject a beacon onto the page. The default finder doesn't use beaconing, so it always returns false.

Reimplemented in net_instaweb::BeaconCriticalImagesFinder.

virtual int net_instaweb::CriticalImagesFinder::SupportInterval ( ) const

Minimum interval to store support for critical image results. This affects how long we keep around evidence that an image might be critical; we'll remember the fact for at least SupportInterval beacon insertions if it only occurs once, and we'll remember it longer if multiple beacons support image criticality. By default, SupportInteval() = 1 and we only store one beacon result. The beacon critical image finder should override this to store a larger number of sets.

Reimplemented in net_instaweb::BeaconCriticalImagesFinder.

static bool net_instaweb::CriticalImagesFinder::UpdateAndWriteBackCriticalImagesCacheEntry ( const StringSet *  html_critical_images_set,
const StringSet *  css_critical_images_set,
const RenderedImages *  rendered_images_set,
int  support_interval,
const PropertyCache::Cohort cohort,
AbstractPropertyPage page,
CriticalImages *  critical_images 

Completes a critical image set update operation and writes the data back to the property cache.

virtual void net_instaweb::CriticalImagesFinder::UpdateCandidateImagesForBeaconing ( const StringSet &  images,
RewriteDriver driver,
bool  beaconing 

For implementations that use beaconing, update the candidate images in the property cache. New images are a signal that we should beacon more often for a few requests. The beaconing argument should indicate if the current request is injecting a beacon. If so, we don't need to trigger a beacon on the next request even if the candidate images have changed.

Reimplemented in net_instaweb::BeaconCriticalImagesFinder.

static bool net_instaweb::CriticalImagesFinder::UpdateCriticalImagesCacheEntry ( const StringSet *  html_critical_images_set,
const StringSet *  css_critical_images_set,
const RenderedImages *  rendered_images_set,
int  support_interval,
const PropertyCache::Cohort cohort,
AbstractPropertyPage page 

Alternative interface to update the critical images cache entry. This is useful in contexts like the beacon handler where the RewriteDriver for the original request no longer exists.

bool net_instaweb::CriticalImagesFinder::UpdateCriticalImagesCacheEntryFromDriver ( const StringSet *  html_critical_images_set,
const StringSet *  css_critical_images_set,
RewriteDriver driver 

Updates the critical images property cache entry. Returns whether the update succeeded or not. Note that this base implementation does not call WriteCohort. This should be called in the subclass if the cohort is not written elsewhere. NULL is permitted for the critical image sets if only one of the html or css sets is being updated, but not the other.

virtual void net_instaweb::CriticalImagesFinder::UpdateCriticalImagesSetInDriver ( RewriteDriver driver)

Gets critical images if present in the property cache and updates the critical_images set in RewriteDriver with the obtained set. If you override this method, driver->critical_images_info() must not return NULL after this function has been called.

Reimplemented in net_instaweb::MockCriticalImagesFinder.

Member Data Documentation

const char net_instaweb::CriticalImagesFinder::kRenderedImageDimensionsProperty[]

Property name for the rendered image dimensions retreived from webkit render response for the page.

The documentation for this class was generated from the following file: