Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(884)

Unified Diff: chrome/browser/predictors/resource_prefetch_predictor_tables.h

Issue 462423004: Revert CL 117933003. Re-add resource speculative prefetching code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase to fix patch failure Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/predictors/resource_prefetch_predictor_tables.h
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_tables.h b/chrome/browser/predictors/resource_prefetch_predictor_tables.h
new file mode 100644
index 0000000000000000000000000000000000000000..bd266a0034749121cbe73371babe67bc9f6570d1
--- /dev/null
+++ b/chrome/browser/predictors/resource_prefetch_predictor_tables.h
@@ -0,0 +1,160 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_
+#define CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_
+
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/time/time.h"
+#include "chrome/browser/predictors/predictor_table_base.h"
+#include "chrome/browser/predictors/resource_prefetch_common.h"
+#include "content/public/common/resource_type.h"
+#include "url/gurl.h"
+
+namespace sql {
+class Statement;
+}
+
+namespace predictors {
+
+// Interface for database tables used by the ResourcePrefetchPredictor.
+// All methods except the constructor and destructor need to be called on the DB
+// thread.
+//
+// Currently manages:
+// - UrlResourceTable - resources per Urls.
+// - UrlMetadataTable - misc data for Urls (like last visit time).
+// - HostResourceTable - resources per host.
+// - HostMetadataTable - misc data for hosts.
+class ResourcePrefetchPredictorTables : public PredictorTableBase {
+ public:
+ // Used in the UrlResourceTable and HostResourceTable to store resources
+ // required for the page or host.
+ struct ResourceRow {
+ ResourceRow();
+ ResourceRow(const ResourceRow& other);
+ ResourceRow(const std::string& main_frame_url,
+ const std::string& resource_url,
+ content::ResourceType resource_type,
+ int number_of_hits,
+ int number_of_misses,
+ int consecutive_misses,
+ double average_position);
+ void UpdateScore();
+ bool operator==(const ResourceRow& rhs) const;
+
+ // Stores the host for host based data, main frame Url for the Url based
+ // data. This field is cleared for efficiency reasons and the code outside
+ // this class should not assume it is set.
+ std::string primary_key;
+
+ GURL resource_url;
+ content::ResourceType resource_type;
+ size_t number_of_hits;
+ size_t number_of_misses;
+ size_t consecutive_misses;
+ double average_position;
+
+ // Not stored.
+ float score;
+ };
+ typedef std::vector<ResourceRow> ResourceRows;
+
+ // Sorts the ResourceRows by score, descending.
+ struct ResourceRowSorter {
+ bool operator()(const ResourceRow& x, const ResourceRow& y) const;
+ };
+
+ // Aggregated data for a Url or Host. Although the data differs slightly, we
+ // store them in the same structure, because most of the fields are common and
+ // it allows us to use the same functions.
+ struct PrefetchData {
+ PrefetchData(PrefetchKeyType key_type, const std::string& primary_key);
+ PrefetchData(const PrefetchData& other);
+ ~PrefetchData();
+ bool operator==(const PrefetchData& rhs) const;
+
+ bool is_host() const { return key_type == PREFETCH_KEY_TYPE_HOST; }
+
+ // Is the data a host as opposed to a Url?
+ PrefetchKeyType key_type; // Not const to be able to assign.
+ std::string primary_key; // is_host() ? main frame url : host.
+
+ base::Time last_visit;
+ ResourceRows resources;
+ };
+ // Map from primary key to PrefetchData for the key.
+ typedef std::map<std::string, PrefetchData> PrefetchDataMap;
+
+ // Returns data for all Urls and Hosts.
+ virtual void GetAllData(PrefetchDataMap* url_data_map,
+ PrefetchDataMap* host_data_map);
+
+ // Updates data for a Url and a host. If either of the |url_data| or
+ // |host_data| has an empty primary key, it will be ignored.
+ // Note that the Urls and primary key in |url_data| and |host_data| should be
+ // less than |kMaxStringLength| in length.
+ virtual void UpdateData(const PrefetchData& url_data,
+ const PrefetchData& host_data);
+
+ // Delete data for the input |urls| and |hosts|.
+ virtual void DeleteData(const std::vector<std::string>& urls,
+ const std::vector<std::string>& hosts);
+
+ // Wrapper over DeleteData for convenience.
+ virtual void DeleteSingleDataPoint(const std::string& key,
+ PrefetchKeyType key_type);
+
+ // Deletes all data in all the tables.
+ virtual void DeleteAllData();
+
+ // The maximum length of the string that can be stored in the DB.
+ static const size_t kMaxStringLength;
+
+ private:
+ friend class PredictorDatabaseInternal;
+ friend class MockResourcePrefetchPredictorTables;
+
+ ResourcePrefetchPredictorTables();
+ virtual ~ResourcePrefetchPredictorTables();
+
+ // Helper functions below help perform functions on the Url and host table
+ // using the same code.
+ void GetAllDataHelper(PrefetchKeyType key_type,
+ PrefetchDataMap* data_map,
+ std::vector<std::string>* to_delete);
+ bool UpdateDataHelper(const PrefetchData& data);
+ void DeleteDataHelper(PrefetchKeyType key_type,
+ const std::vector<std::string>& keys);
+
+ // Returns true if the strings in the |data| are less than |kMaxStringLength|
+ // in length.
+ bool StringsAreSmallerThanDBLimit(const PrefetchData& data) const;
+
+ // PredictorTableBase methods.
+ virtual void CreateTableIfNonExistent() OVERRIDE;
+ virtual void LogDatabaseStats() OVERRIDE;
+
+ // Helpers to return Statements for cached Statements. The caller must take
+ // ownership of the return Statements.
+ sql::Statement* GetUrlResourceDeleteStatement();
+ sql::Statement* GetUrlResourceUpdateStatement();
+ sql::Statement* GetUrlMetadataDeleteStatement();
+ sql::Statement* GetUrlMetadataUpdateStatement();
+
+ sql::Statement* GetHostResourceDeleteStatement();
+ sql::Statement* GetHostResourceUpdateStatement();
+ sql::Statement* GetHostMetadataDeleteStatement();
+ sql::Statement* GetHostMetadataUpdateStatement();
+
+ DISALLOW_COPY_AND_ASSIGN(ResourcePrefetchPredictorTables);
+};
+
+} // namespace predictors
+
+#endif // CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_

Powered by Google App Engine
This is Rietveld 408576698