trending_tile_handler.cc 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/query_tiles/internal/trending_tile_handler.h"
  5. #include "components/query_tiles/internal/stats.h"
  6. #include "components/query_tiles/internal/tile_config.h"
  7. #include "components/query_tiles/internal/tile_utils.h"
  8. #include "components/query_tiles/switches.h"
  9. namespace query_tiles {
  10. TrendingTileHandler::TrendingTileHandler() = default;
  11. TrendingTileHandler::~TrendingTileHandler() = default;
  12. void TrendingTileHandler::Reset() {
  13. tile_impressions_.clear();
  14. }
  15. std::vector<Tile> TrendingTileHandler::FilterExtraTrendingTiles(
  16. const std::vector<std::unique_ptr<Tile>>& tiles) {
  17. int trending_count = 0;
  18. std::vector<Tile> result;
  19. for (const auto& tile : tiles) {
  20. if (IsTrendingTile(tile->id)) {
  21. if (trending_count >= TileConfig::GetNumTrendingTilesToDisplay())
  22. continue;
  23. ++trending_count;
  24. RecordImpression(tile->id);
  25. }
  26. result.emplace_back(*tile);
  27. }
  28. return result;
  29. }
  30. void TrendingTileHandler::OnTileClicked(const std::string& tile_id) {
  31. if (IsTrendingTile(tile_id))
  32. stats::RecordTrendingTileEvent(stats::TrendingTileEvent::kClicked);
  33. }
  34. std::vector<std::string> TrendingTileHandler::GetTrendingTilesToRemove() {
  35. std::vector<std::string> tile_ids;
  36. ImpressionMap::iterator it = tile_impressions_.begin();
  37. while (it != tile_impressions_.end()) {
  38. if (it->second >= TileConfig::GetMaxTrendingTileImpressions()) {
  39. tile_ids.emplace_back(it->first);
  40. it = tile_impressions_.erase(it);
  41. stats::RecordTrendingTileEvent(stats::TrendingTileEvent::kRemoved);
  42. } else {
  43. ++it;
  44. }
  45. }
  46. return tile_ids;
  47. }
  48. void TrendingTileHandler::RecordImpression(const std::string& tile_id) {
  49. ++tile_impressions_[tile_id];
  50. stats::RecordTrendingTileEvent(stats::TrendingTileEvent::kShown);
  51. }
  52. } // namespace query_tiles