You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.0 KiB
85 lines
3.0 KiB
/*
|
|
* Copyright (C) 2016 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "ChecksumCalculatorThreadInfo.h"
|
|
|
|
#include "host-common/crash_reporter.h"
|
|
|
|
#include <atomic>
|
|
#include <string>
|
|
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
|
|
namespace {
|
|
|
|
#if TRACE_CHECKSUMHELPER
|
|
std::atomic<size_t> sNumInstances(0);
|
|
#endif // TRACE_CHECKSUMHELPER
|
|
}
|
|
|
|
static ChecksumCalculatorThreadInfo* getChecksumCalculatorThreadInfo() {
|
|
static thread_local ChecksumCalculatorThreadInfo* tls = new ChecksumCalculatorThreadInfo;
|
|
return tls;
|
|
}
|
|
|
|
ChecksumCalculatorThreadInfo::ChecksumCalculatorThreadInfo() {
|
|
LOG_CHECKSUMHELPER("%s: Checksum thread created (%u instances)\n",
|
|
__FUNCTION__, (unsigned int)(++sNumInstances));
|
|
}
|
|
|
|
ChecksumCalculatorThreadInfo::~ChecksumCalculatorThreadInfo() {
|
|
LOG_CHECKSUMHELPER("%s: GLprotocol destroyed (%u instances)\n",
|
|
__FUNCTION__, (unsigned int)(--sNumInstances));
|
|
}
|
|
|
|
ChecksumCalculator& ChecksumCalculatorThreadInfo::get() {
|
|
return getChecksumCalculatorThreadInfo()->m_protocol;
|
|
}
|
|
|
|
bool ChecksumCalculatorThreadInfo::setVersion(uint32_t version) {
|
|
return getChecksumCalculatorThreadInfo()->m_protocol.setVersion(version);
|
|
}
|
|
|
|
bool ChecksumCalculatorThreadInfo::writeChecksum(ChecksumCalculator* calc,
|
|
void* buf,
|
|
size_t bufLen,
|
|
void* outputChecksum,
|
|
size_t outputChecksumLen) {
|
|
calc->addBuffer(buf, bufLen);
|
|
return calc->writeChecksum(outputChecksum, outputChecksumLen);
|
|
}
|
|
|
|
bool ChecksumCalculatorThreadInfo::validate(ChecksumCalculator* calc,
|
|
void* buf,
|
|
size_t bufLen,
|
|
void* checksum,
|
|
size_t checksumLen) {
|
|
calc->addBuffer(buf, bufLen);
|
|
return calc->validate(checksum, checksumLen);
|
|
}
|
|
|
|
void ChecksumCalculatorThreadInfo::validOrDie(ChecksumCalculator* calc,
|
|
void* buf,
|
|
size_t bufLen,
|
|
void* checksum,
|
|
size_t checksumLen,
|
|
const char* message) {
|
|
if (!validate(calc, buf, bufLen, checksum, checksumLen)) {
|
|
emugl_crash_reporter(message);
|
|
}
|
|
}
|