1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ART_COMPILER_DEX_VERIFICATION_RESULTS_H_
18 #define ART_COMPILER_DEX_VERIFICATION_RESULTS_H_
19 
20 #include <stdint.h>
21 #include <set>
22 #include <vector>
23 
24 #include "base/macros.h"
25 #include "base/mutex.h"
26 #include "class_reference.h"
27 #include "method_reference.h"
28 #include "safe_map.h"
29 
30 namespace art {
31 
32 namespace verifier {
33 class MethodVerifier;
34 }  // namespace verifier
35 
36 class CompilerOptions;
37 class VerifiedMethod;
38 
39 // Used by CompilerCallbacks to track verification information from the Runtime.
40 class VerificationResults {
41   public:
42     explicit VerificationResults(const CompilerOptions* compiler_options);
43     ~VerificationResults();
44 
45     bool ProcessVerifiedMethod(verifier::MethodVerifier* method_verifier)
46         SHARED_LOCKS_REQUIRED(Locks::mutator_lock_)
47         LOCKS_EXCLUDED(verified_methods_lock_);
48 
49     const VerifiedMethod* GetVerifiedMethod(MethodReference ref)
50         LOCKS_EXCLUDED(verified_methods_lock_);
51     void RemoveVerifiedMethod(MethodReference ref) LOCKS_EXCLUDED(verified_methods_lock_);
52 
53     void AddRejectedClass(ClassReference ref) LOCKS_EXCLUDED(rejected_classes_lock_);
54     bool IsClassRejected(ClassReference ref) LOCKS_EXCLUDED(rejected_classes_lock_);
55 
56     bool IsCandidateForCompilation(MethodReference& method_ref,
57                                    const uint32_t access_flags);
58 
59   private:
60     const CompilerOptions* const compiler_options_;
61 
62     // Verified methods.
63     typedef SafeMap<MethodReference, const VerifiedMethod*,
64         MethodReferenceComparator> VerifiedMethodMap;
65     ReaderWriterMutex verified_methods_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER;
66     VerifiedMethodMap verified_methods_ GUARDED_BY(verified_methods_lock_);
67 
68     // Rejected classes.
69     ReaderWriterMutex rejected_classes_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER;
70     std::set<ClassReference> rejected_classes_ GUARDED_BY(rejected_classes_lock_);
71 };
72 
73 }  // namespace art
74 
75 #endif  // ART_COMPILER_DEX_VERIFICATION_RESULTS_H_
76