| /* |
| * Copyright (C) 2010 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. |
| */ |
| |
| #ifndef JNI_CONSTANTS_H_included |
| #define JNI_CONSTANTS_H_included |
| |
| #include "JNIHelp.h" |
| |
| /** |
| * A cache to avoid calling FindClass at runtime. |
| * |
| * Class lookup is relatively expensive, so we do these lookups at startup. This means that code |
| * that never uses, say, java.util.zip.Deflater still has to pay for the lookup, but it means that |
| * on device the cost is paid during boot and amortized. A central cache also removes the temptation |
| * to dynamically call FindClass rather than add a small cache to each file that needs one. Another |
| * cost is that each class cached here requires a global reference, though in practice we save |
| * enough by not having a global reference for each file that uses a class such as java.lang.String |
| * which is used in several files. |
| * |
| * FindClass is still called in a couple of situations: when throwing exceptions, and in some of |
| * the serialization code. The former is clearly not a performance case, and we're currently |
| * assuming that neither is the latter. |
| * |
| * TODO: similar arguments hold for field and method IDs; we should cache them centrally too. |
| */ |
| struct JniConstants { |
| static void init(JNIEnv* env); |
| |
| static jclass booleanClass; |
| static jclass byteArrayClass; |
| static jclass calendarClass; |
| static jclass charsetICUClass; |
| static jclass doubleClass; |
| static jclass errnoExceptionClass; |
| static jclass fileDescriptorClass; |
| static jclass gaiExceptionClass; |
| static jclass inet6AddressClass; |
| static jclass inet6AddressHolderClass; |
| static jclass inetAddressClass; |
| static jclass inetAddressHolderClass; |
| static jclass inetSocketAddressClass; |
| static jclass inetSocketAddressHolderClass; |
| static jclass integerClass; |
| static jclass localeDataClass; |
| static jclass longClass; |
| static jclass mutableIntClass; |
| static jclass mutableLongClass; |
| static jclass netlinkSocketAddressClass; |
| static jclass packetSocketAddressClass; |
| static jclass patternSyntaxExceptionClass; |
| static jclass referenceClass; |
| static jclass socketTaggerClass; |
| static jclass stringClass; |
| static jclass structAddrinfoClass; |
| static jclass structFlockClass; |
| static jclass structGroupReqClass; |
| static jclass structGroupSourceReqClass; |
| static jclass structIfaddrs; |
| static jclass structLingerClass; |
| static jclass structPasswdClass; |
| static jclass structPollfdClass; |
| static jclass structStatClass; |
| static jclass structStatVfsClass; |
| static jclass structTimevalClass; |
| static jclass structTimespecClass; |
| static jclass structUcredClass; |
| static jclass structUtsnameClass; |
| static jclass unixSocketAddressClass; |
| static jclass zipEntryClass; |
| }; |
| |
| #define NATIVE_METHOD(className, functionName, signature) \ |
| { #functionName, signature, reinterpret_cast<void*>(className ## _ ## functionName) } |
| |
| #endif // JNI_CONSTANTS_H_included |