Revert "Add JavaInputStreamAdaptor files into third_party directory."
This reverts commit cf8b723ffd
.
Reason for revert: reverting and relanding to make the google3
roller happy
Original change's description:
> Add JavaInputStreamAdaptor files into third_party directory.
>
> This code needs to be migrated out of the main Skia directory due to its
> use of the Apache 2.0 license. A followup CL will remove these files
> from their current home at platform_tools/android/apps/skottie/src/
> main/cpp.
>
> Change-Id: I939b05afcebb29e1deab1d4ae1b38012f719cf7e
> Bug: skia:10310
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/295082
> Reviewed-by: Ben Wagner <bungeman@google.com>
> Reviewed-by: Weston Tracey <westont@google.com>
> Commit-Queue: John Stiles <johnstiles@google.com>
TBR=bungeman@google.com,westont@google.com,johnstiles@google.com
Change-Id: Ib3cbad92b8c5616735a013d06e3345ac50f78c84
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:10310, skia:10353
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/295200
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
This commit is contained in:
parent
cb40620540
commit
9d79ac6b81
256
third_party/aosp/JavaInputStreamAdaptor.cpp
vendored
256
third_party/aosp/JavaInputStreamAdaptor.cpp
vendored
@ -1,256 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 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 "include/core/SkTypes.h"
|
||||
#include "platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.h"
|
||||
|
||||
static jclass findClassCheck(JNIEnv* env, const char classname[]) {
|
||||
jclass clazz = env->FindClass(classname);
|
||||
SkASSERT(!env->ExceptionCheck());
|
||||
return clazz;
|
||||
}
|
||||
|
||||
static jmethodID getMethodIDCheck(JNIEnv* env, jclass clazz,
|
||||
const char methodname[], const char type[]) {
|
||||
jmethodID id = env->GetMethodID(clazz, methodname, type);
|
||||
SkASSERT(!env->ExceptionCheck());
|
||||
return id;
|
||||
}
|
||||
|
||||
static jmethodID gInputStream_readMethodID;
|
||||
static jmethodID gInputStream_skipMethodID;
|
||||
|
||||
static JNIEnv* get_env_or_die(JavaVM* jvm) {
|
||||
JNIEnv* env;
|
||||
if (jvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
|
||||
char errorMessage[256];
|
||||
sprintf(errorMessage, "Failed to get JNIEnv for JavaVM: %p", jvm);
|
||||
SK_ABORT(errorMessage);
|
||||
}
|
||||
return env;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper for a Java InputStream.
|
||||
*/
|
||||
class JavaInputStreamAdaptor : public SkStream {
|
||||
JavaInputStreamAdaptor(JavaVM* jvm, jobject js, jbyteArray ar, jint capacity,
|
||||
bool swallowExceptions)
|
||||
: fJvm(jvm)
|
||||
, fJavaInputStream(js)
|
||||
, fJavaByteArray(ar)
|
||||
, fCapacity(capacity)
|
||||
, fBytesRead(0)
|
||||
, fIsAtEnd(false)
|
||||
, fSwallowExceptions(swallowExceptions) {}
|
||||
|
||||
public:
|
||||
static JavaInputStreamAdaptor* Create(JNIEnv* env, jobject js, jbyteArray ar,
|
||||
bool swallowExceptions) {
|
||||
JavaVM* jvm;
|
||||
if (env->GetJavaVM(&jvm) != JNI_OK) {
|
||||
SK_ABORT("Failed to get JavaVM");
|
||||
}
|
||||
|
||||
js = env->NewGlobalRef(js);
|
||||
if (!js) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
ar = (jbyteArray) env->NewGlobalRef(ar);
|
||||
if (!ar) {
|
||||
env->DeleteGlobalRef(js);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
jint capacity = env->GetArrayLength(ar);
|
||||
return new JavaInputStreamAdaptor(jvm, js, ar, capacity, swallowExceptions);
|
||||
}
|
||||
|
||||
~JavaInputStreamAdaptor() override {
|
||||
auto* env = get_env_or_die(fJvm);
|
||||
env->DeleteGlobalRef(fJavaInputStream);
|
||||
env->DeleteGlobalRef(fJavaByteArray);
|
||||
}
|
||||
|
||||
size_t read(void* buffer, size_t size) override {
|
||||
auto* env = get_env_or_die(fJvm);
|
||||
if (!fSwallowExceptions && checkException(env)) {
|
||||
// Just in case the caller did not clear from a previous exception.
|
||||
return 0;
|
||||
}
|
||||
if (NULL == buffer) {
|
||||
if (0 == size) {
|
||||
return 0;
|
||||
} else {
|
||||
/* InputStream.skip(n) can return <=0 but still not be at EOF
|
||||
If we see that value, we need to call read(), which will
|
||||
block if waiting for more data, or return -1 at EOF
|
||||
*/
|
||||
size_t amountSkipped = 0;
|
||||
do {
|
||||
size_t amount = this->doSkip(size - amountSkipped, env);
|
||||
if (0 == amount) {
|
||||
char tmp;
|
||||
amount = this->doRead(&tmp, 1, env);
|
||||
if (0 == amount) {
|
||||
// if read returned 0, we're at EOF
|
||||
fIsAtEnd = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
amountSkipped += amount;
|
||||
} while (amountSkipped < size);
|
||||
return amountSkipped;
|
||||
}
|
||||
}
|
||||
return this->doRead(buffer, size, env);
|
||||
}
|
||||
|
||||
bool isAtEnd() const override { return fIsAtEnd; }
|
||||
|
||||
private:
|
||||
size_t doRead(void* buffer, size_t size, JNIEnv* env) {
|
||||
size_t bytesRead = 0;
|
||||
// read the bytes
|
||||
do {
|
||||
jint requested = 0;
|
||||
if (size > static_cast<size_t>(fCapacity)) {
|
||||
requested = fCapacity;
|
||||
} else {
|
||||
// This is safe because requested is clamped to (jint)
|
||||
// fCapacity.
|
||||
requested = static_cast<jint>(size);
|
||||
}
|
||||
|
||||
jint n = env->CallIntMethod(fJavaInputStream,
|
||||
gInputStream_readMethodID, fJavaByteArray, 0, requested);
|
||||
if (checkException(env)) {
|
||||
SkDebugf("---- read threw an exception\n");
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
if (n < 0) { // n == 0 should not be possible, see InputStream read() specifications.
|
||||
fIsAtEnd = true;
|
||||
break; // eof
|
||||
}
|
||||
|
||||
env->GetByteArrayRegion(fJavaByteArray, 0, n,
|
||||
reinterpret_cast<jbyte*>(buffer));
|
||||
if (checkException(env)) {
|
||||
SkDebugf("---- read:GetByteArrayRegion threw an exception\n");
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
buffer = (void*)((char*)buffer + n);
|
||||
bytesRead += n;
|
||||
size -= n;
|
||||
fBytesRead += n;
|
||||
} while (size != 0);
|
||||
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
size_t doSkip(size_t size, JNIEnv* env) {
|
||||
jlong skipped = env->CallLongMethod(fJavaInputStream,
|
||||
gInputStream_skipMethodID, (jlong)size);
|
||||
if (checkException(env)) {
|
||||
SkDebugf("------- skip threw an exception\n");
|
||||
return 0;
|
||||
}
|
||||
if (skipped < 0) {
|
||||
skipped = 0;
|
||||
}
|
||||
|
||||
return (size_t)skipped;
|
||||
}
|
||||
|
||||
bool checkException(JNIEnv* env) {
|
||||
if (!env->ExceptionCheck()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
env->ExceptionDescribe();
|
||||
if (fSwallowExceptions) {
|
||||
env->ExceptionClear();
|
||||
}
|
||||
|
||||
// There is no way to recover from the error, so consider the stream
|
||||
// to be at the end.
|
||||
fIsAtEnd = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
JavaVM* fJvm;
|
||||
jobject fJavaInputStream;
|
||||
jbyteArray fJavaByteArray;
|
||||
const jint fCapacity;
|
||||
size_t fBytesRead;
|
||||
bool fIsAtEnd;
|
||||
const bool fSwallowExceptions;
|
||||
};
|
||||
|
||||
static SkStream* CreateJavaInputStreamAdaptor(JNIEnv* env, jobject stream, jbyteArray storage,
|
||||
bool swallowExceptions = true) {
|
||||
return JavaInputStreamAdaptor::Create(env, stream, storage, swallowExceptions);
|
||||
}
|
||||
|
||||
static SkMemoryStream* adaptor_to_mem_stream(SkStream* stream) {
|
||||
SkASSERT(stream != NULL);
|
||||
size_t bufferSize = 4096;
|
||||
size_t streamLen = 0;
|
||||
size_t len;
|
||||
char* data = (char*)sk_malloc_throw(bufferSize);
|
||||
|
||||
while ((len = stream->read(data + streamLen,
|
||||
bufferSize - streamLen)) != 0) {
|
||||
streamLen += len;
|
||||
if (streamLen == bufferSize) {
|
||||
bufferSize *= 2;
|
||||
data = (char*)sk_realloc_throw(data, bufferSize);
|
||||
}
|
||||
}
|
||||
data = (char*)sk_realloc_throw(data, streamLen);
|
||||
|
||||
SkMemoryStream* streamMem = new SkMemoryStream();
|
||||
streamMem->setMemoryOwned(data, streamLen);
|
||||
return streamMem;
|
||||
}
|
||||
|
||||
SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream,
|
||||
jbyteArray storage) {
|
||||
std::unique_ptr<SkStream> adaptor(CreateJavaInputStreamAdaptor(env, stream, storage));
|
||||
if (NULL == adaptor.get()) {
|
||||
return NULL;
|
||||
}
|
||||
return adaptor_to_mem_stream(adaptor.get());
|
||||
}
|
||||
|
||||
|
||||
extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||||
JNIEnv* env;
|
||||
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
jclass inputStream_Clazz = findClassCheck(env, "java/io/InputStream");
|
||||
gInputStream_readMethodID = getMethodIDCheck(env, inputStream_Clazz, "read", "([BII)I");
|
||||
gInputStream_skipMethodID = getMethodIDCheck(env, inputStream_Clazz, "skip", "(J)J");
|
||||
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
24
third_party/aosp/JavaInputStreamAdaptor.h
vendored
24
third_party/aosp/JavaInputStreamAdaptor.h
vendored
@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "include/core/SkStream.h"
|
||||
#include "include/private/SkMalloc.h"
|
||||
#include <jni.h>
|
||||
|
||||
SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream,
|
||||
jbyteArray storage);
|
161
third_party/aosp/LICENSE
vendored
161
third_party/aosp/LICENSE
vendored
@ -1,161 +0,0 @@
|
||||
Apache License
|
||||
|
||||
Version 2.0, January 2004
|
||||
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and
|
||||
distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the
|
||||
copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other
|
||||
entities that control, are controlled by, or are under common control with
|
||||
that entity. For the purposes of this definition, "control" means (i) the
|
||||
power, direct or indirect, to cause the direction or management of such
|
||||
entity, whether by contract or otherwise, or (ii) ownership of fifty
|
||||
percent (50%) or more of the outstanding shares, or (iii) beneficial
|
||||
ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
||||
permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation
|
||||
or translation of a Source form, including but not limited to compiled
|
||||
object code, generated documentation, and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object
|
||||
form, made available under the License, as indicated by a copyright
|
||||
notice that is included in or attached to the work (an example is
|
||||
provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original
|
||||
version of the Work and any modifications or additions to that Work or
|
||||
Derivative Works thereof, that is intentionally submitted to Licensor
|
||||
for inclusion in the Work by the copyright owner or by an individual or
|
||||
Legal Entity authorized to submit on behalf of the copyright owner. For
|
||||
the purposes of this definition, "submitted" means any form of electronic,
|
||||
verbal, or written communication sent to the Licensor or its
|
||||
representatives, including but not limited to communication on electronic
|
||||
mailing lists, source code control systems, and issue tracking systems that
|
||||
are managed by, or on behalf of, the Licensor for the purpose of discussing
|
||||
and improving the Work, but excluding communication that is conspicuously
|
||||
marked or otherwise designated in writing by the copyright owner as "Not
|
||||
a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on
|
||||
behalf of whom a Contribution has been received by Licensor and subsequently
|
||||
incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of this
|
||||
License, each Contributor hereby grants to You a perpetual, worldwide,
|
||||
non-exclusive, no-charge, royalty-free, irrevocable copyright license to
|
||||
reproduce, prepare Derivative Works of, publicly display, publicly perform,
|
||||
sublicense, and distribute the Work and such Derivative Works in Source or
|
||||
Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of this
|
||||
License, each Contributor hereby grants to You a perpetual, worldwide,
|
||||
non-exclusive, no-charge, royalty-free, irrevocable (except as stated in
|
||||
this section) patent license to make, have made, use, offer to sell, sell,
|
||||
import, and otherwise transfer the Work, where such license applies only to
|
||||
those patent claims licensable by such Contributor that are necessarily
|
||||
infringed by their Contribution(s) alone or by combination of their
|
||||
Contribution(s) with the Work to which such Contribution(s) was submitted.
|
||||
If You institute patent litigation against any entity (including a cross-claim
|
||||
or counterclaim in a lawsuit) alleging that the Work or a Contribution
|
||||
incorporated within the Work constitutes direct or contributory patent
|
||||
infringement, then any patent licenses granted to You under this License
|
||||
for that Work shall terminate as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the Work or
|
||||
Derivative Works thereof in any medium, with or without modifications, and
|
||||
in Source or Object form, provided that You meet the following conditions:
|
||||
|
||||
You must give any other recipients of the Work or Derivative Works a copy of
|
||||
this License; and
|
||||
You must cause any modified files to carry prominent notices stating that
|
||||
You changed the files; and
|
||||
You must retain, in the Source form of any Derivative Works that You
|
||||
distribute, all copyright, patent, trademark, and attribution notices
|
||||
from the Source form of the Work, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works; and
|
||||
If the Work includes a "NOTICE" text file as part of its distribution,
|
||||
then any Derivative Works that You distribute must include a readable
|
||||
copy of the attribution notices contained within such NOTICE file, excluding
|
||||
those notices that do not pertain to any part of the Derivative Works, in
|
||||
at least one of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or documentation, if
|
||||
provided along with the Derivative Works; or, within a display generated by
|
||||
the Derivative Works, if and wherever such third-party notices normally
|
||||
appear. The contents of the NOTICE file are for informational purposes
|
||||
only and do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside or as
|
||||
an addendum to the NOTICE text from the Work, provided that such additional
|
||||
attribution notices cannot be construed as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may provide
|
||||
additional or different license terms and conditions for use, reproduction, or
|
||||
distribution of Your modifications, or for any such Derivative Works as a
|
||||
whole, provided Your use, reproduction, and distribution of the Work otherwise
|
||||
complies with the conditions stated in this License.
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise, any
|
||||
Contribution intentionally submitted for inclusion in the Work by You to the
|
||||
Licensor shall be under the terms and conditions of this License, without any
|
||||
additional terms or conditions. Notwithstanding the above, nothing herein
|
||||
shall supersede or modify the terms of any separate license agreement you
|
||||
may have executed with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade names,
|
||||
trademarks, service marks, or product names of the Licensor, except as
|
||||
required for reasonable and customary use in describing the origin of the
|
||||
Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or agreed to
|
||||
in writing, Licensor provides the Work (and each Contributor provides its
|
||||
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
||||
ANY KIND, either express or implied, including, without limitation, any
|
||||
warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining
|
||||
the appropriateness of using or redistributing the Work and assume any risks
|
||||
associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory, whether in
|
||||
tort (including negligence), contract, or otherwise, unless required by
|
||||
applicable law (such as deliberate and grossly negligent acts) or agreed to
|
||||
in writing, shall any Contributor be liable to You for damages, including
|
||||
any direct, indirect, special, incidental, or consequential damages of any
|
||||
character arising as a result of this License or out of the use or inability
|
||||
to use the Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all other
|
||||
commercial damages or losses), even if such Contributor has been advised
|
||||
of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing the
|
||||
Work or Derivative Works thereof, You may choose to offer, and charge a
|
||||
fee for, acceptance of support, warranty, indemnity, or other liability
|
||||
obligations and/or rights consistent with this License. However, in accepting
|
||||
such obligations, You may act only on Your own behalf and on Your sole
|
||||
responsibility, not on behalf of any other Contributor, and only if You
|
||||
agree to indemnify, defend, and hold each Contributor harmless for any
|
||||
liability incurred by, or claims asserted against, such Contributor by
|
||||
reason of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
Loading…
Reference in New Issue
Block a user