#include "services/webnn/webnn_graph_impl.h"
#include <math.h>
#include <cstdint>
#include <optional>
#include <utility>
#include <vector>
#include "base/containers/fixed_flat_map.h"
#include "base/dcheck_is_on.h"
#include "base/ranges/algorithm.h"
#include "base/types/expected.h"
#include "base/types/pass_key.h"
#include "services/webnn/error.h"
#include "services/webnn/public/cpp/graph_validation_utils.h"
#include "services/webnn/public/cpp/operand_descriptor.h"
#include "services/webnn/public/mojom/webnn_context_provider.mojom.h"
#include "services/webnn/public/mojom/webnn_error.mojom.h"
#include "services/webnn/webnn_buffer_impl.h"
#include "services/webnn/webnn_context_impl.h"
#include "services/webnn/webnn_utils.h"
#include "third_party/abseil-cpp/absl/types/variant.h"
#if BUILDFLAG(IS_WIN)
#include "services/webnn/dml/graph_impl_dml.h"
#endif
namespace webnn {
namespace {
bool ValidateInputsForComputation(
const base::flat_map<std::string, mojo_base::BigBuffer>& named_inputs,
const base::flat_map<std::string, OperandDescriptor>&
names_to_descriptors) { … }
bool ValidateWebNNBuffers(
const base::flat_map<std::string_view, WebNNBufferImpl*>& named_buffers,
const base::flat_map<std::string, OperandDescriptor>&
names_to_descriptors) { … }
bool ValidateWebNNBuffersUsage(
const base::flat_map<std::string, blink::WebNNBufferToken>& named_inputs,
const base::flat_map<std::string, blink::WebNNBufferToken>& named_outputs) { … }
}
WebNNGraphImpl::ComputeResourceInfo::ComputeResourceInfo(
base::flat_map<std::string, OperandDescriptor> input_names_to_descriptors,
base::flat_map<std::string, OperandDescriptor> output_names_to_descriptors,
base::PassKey<WebNNGraphBuilderImpl> pass_key)
: … { … }
WebNNGraphImpl::ComputeResourceInfo::ComputeResourceInfo(
const ComputeResourceInfo&) = default;
WebNNGraphImpl::ComputeResourceInfo&
WebNNGraphImpl::ComputeResourceInfo::operator=(const ComputeResourceInfo&) =
default;
WebNNGraphImpl::ComputeResourceInfo::ComputeResourceInfo(
ComputeResourceInfo&&) = default;
WebNNGraphImpl::ComputeResourceInfo&
WebNNGraphImpl::ComputeResourceInfo::operator=(ComputeResourceInfo&&) = default;
WebNNGraphImpl::ComputeResourceInfo::~ComputeResourceInfo() = default;
WebNNGraphImpl::WebNNGraphImpl(WebNNContextImpl* context,
ComputeResourceInfo compute_resource_info)
: … { … }
WebNNGraphImpl::~WebNNGraphImpl() = default;
void WebNNGraphImpl::Compute(
base::flat_map<std::string, mojo_base::BigBuffer> named_inputs,
mojom::WebNNGraph::ComputeCallback callback) { … }
void WebNNGraphImpl::Dispatch(
const base::flat_map<std::string, blink::WebNNBufferToken>& named_inputs,
const base::flat_map<std::string, blink::WebNNBufferToken>& named_outputs) { … }
}