diff --git a/third_party/aosp/JavaInputStreamAdaptor.cpp b/third_party/aosp/JavaInputStreamAdaptor.cpp deleted file mode 100644 index caeb85917c..0000000000 --- a/third_party/aosp/JavaInputStreamAdaptor.cpp +++ /dev/null @@ -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(&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(fCapacity)) { - requested = fCapacity; - } else { - // This is safe because requested is clamped to (jint) - // fCapacity. - requested = static_cast(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(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 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(&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; -} diff --git a/third_party/aosp/JavaInputStreamAdaptor.h b/third_party/aosp/JavaInputStreamAdaptor.h deleted file mode 100644 index 8cfc2a4ef7..0000000000 --- a/third_party/aosp/JavaInputStreamAdaptor.h +++ /dev/null @@ -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 - -SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream, - jbyteArray storage); diff --git a/third_party/aosp/LICENSE b/third_party/aosp/LICENSE deleted file mode 100644 index 64635a4089..0000000000 --- a/third_party/aosp/LICENSE +++ /dev/null @@ -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 \ No newline at end of file