blob: 70761fed2e1c960941a815713c96d58f38ed5d36 [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_SEGMENTATION_PLATFORM_INTERNAL_EXECUTION_MODEL_MANAGER_H_
#define COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_EXECUTION_MODEL_MANAGER_H_
#include <optional>
#include "base/functional/callback_forward.h"
#include "components/segmentation_platform/public/proto/model_metadata.pb.h"
#include "components/segmentation_platform/public/proto/segmentation_platform.pb.h"
namespace segmentation_platform {
namespace proto {
class SegmentInfo;
} // namespace proto
class ModelProvider;
// The ModelExecutionManager is used to own ModelProvider(s) that interact with
// optimization_guide. All model updates are saved to database.
class ModelManager {
public:
virtual ~ModelManager() = default;
// Disallow copy/assign.
ModelManager(const ModelManager&) = delete;
ModelManager& operator=(const ModelManager&) = delete;
// Invoked whenever there are changes to the state of a segmentation model.
// Will not be invoked unless the proto::SegmentInfo is valid.
using SegmentationModelUpdatedCallback =
base::RepeatingCallback<void(proto::SegmentInfo,
/*old_version*/ std::optional<int64_t>)>;
virtual void Initialize() = 0;
virtual ModelProvider* GetModelProvider(proto::SegmentId segment_id,
proto::ModelSource model_source) = 0;
// For tests:
virtual void SetSegmentationModelUpdatedCallbackForTesting(
SegmentationModelUpdatedCallback model_updated_callback) = 0;
protected:
ModelManager() = default;
};
} // namespace segmentation_platform
#endif // COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_EXECUTION_MODEL_MANAGER_H_