blob: 074e228f415f7d09d5191e094544ff66cabf6cca [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/webnn/webnn_pending_constant_operand.h"
#include "services/webnn/public/cpp/operand_descriptor.h"
#include "services/webnn/webnn_constant_operand.h"
namespace webnn {
WebNNPendingConstantOperand::WebNNPendingConstantOperand(
blink::WebNNPendingConstantToken handle,
OperandDataType data_type,
base::span<const uint8_t> data)
: handle_(std::move(handle)),
data_type_(data_type),
data_(base::HeapArray<uint8_t>::CopiedFrom(data)) {}
WebNNPendingConstantOperand::~WebNNPendingConstantOperand() = default;
std::unique_ptr<WebNNConstantOperand>
WebNNPendingConstantOperand::TakeAsConstantOperand(
OperandDescriptor descriptor) {
// If `data_` has moved, `TakeAsConstantOperand()` has already been called
// previously
CHECK(data_.data());
if (!IsValidWithDescriptor(descriptor)) {
return nullptr;
}
return std::make_unique<WebNNConstantOperand>(std::move(descriptor),
std::move(data_));
}
bool WebNNPendingConstantOperand::IsValidWithDescriptor(
OperandDescriptor descriptor) const {
return data_.size() == descriptor.PackedByteLength() &&
data_type_ == descriptor.data_type();
}
} // namespace webnn