blob: f9b72482822c9ae90a1c2ef7c09784399dbc5237 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_FEED_CORE_V2_VIEW_DEMOTION_H_
#define COMPONENTS_FEED_CORE_V2_VIEW_DEMOTION_H_
#include <iosfwd>
#include <vector>
#include "base/functional/callback_forward.h"
namespace feedstore {
class DocView;
}
namespace feed {
struct DocViewDigest;
namespace internal {
DocViewDigest CreateDigest(std::vector<feedstore::DocView> all_views);
}
class FeedStream;
struct DocViewCount {
// Uniquely identifies content.
uint64_t docid = 0;
// Number of views.
uint64_t view_count = 0;
bool operator==(const DocViewCount& rhs) const;
};
std::ostream& operator<<(std::ostream& os, const DocViewCount& doc_view_count);
// Summarizes stored document view data.
struct DocViewDigest {
DocViewDigest();
~DocViewDigest();
DocViewDigest(const DocViewDigest&);
DocViewDigest(DocViewDigest&&);
DocViewDigest& operator=(const DocViewDigest&);
DocViewDigest& operator=(DocViewDigest&&);
// Document views which are not expired.
std::vector<DocViewCount> doc_view_counts;
// Document views which are expired, and should be removed.
std::vector<feedstore::DocView> old_doc_views;
};
// Reads the DocViewDigest if view demotion is enabled. Otherwise, `callback` is
// called immediately with an empty digest.
void ReadDocViewDigestIfEnabled(
FeedStream& feed_stream,
base::OnceCallback<void(DocViewDigest)> callback);
// Records a document view if view demotion is enabled.
void WriteDocViewIfEnabled(FeedStream& feed_stream, uint64_t docid);
} // namespace feed
#endif // COMPONENTS_FEED_CORE_V2_VIEW_DEMOTION_H_