quick_compiler_callbacks.h revision 6449c62e40ef3a9bb75f664f922555affb532ee4
16449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom/*
26449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * Copyright (C) 2011 The Android Open Source Project
36449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom *
46449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License");
56449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * you may not use this file except in compliance with the License.
66449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * You may obtain a copy of the License at
76449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom *
86449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom *      http://www.apache.org/licenses/LICENSE-2.0
96449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom *
106449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * Unless required by applicable law or agreed to in writing, software
116449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS,
126449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * See the License for the specific language governing permissions and
146449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom * limitations under the License.
156449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom */
166449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
176449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#ifndef ART_COMPILER_DRIVER_COMPILER_CALLBACKS_IMPL_H_
186449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#define ART_COMPILER_DRIVER_COMPILER_CALLBACKS_IMPL_H_
196449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
206449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#include "compiler_callbacks.h"
216449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#include "dex/quick/dex_file_to_method_inliner_map.h"
226449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#include "verifier/method_verifier-inl.h"
236449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
246449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstromnamespace art {
256449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
266449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstromclass CompilerCallbacksImpl : public CompilerCallbacks {
276449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  public:
286449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    CompilerCallbacksImpl(VerificationResults* verification_results,
296449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom                          DexFileToMethodInlinerMap* method_inliner_map)
306449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom        : verification_results_(verification_results),
316449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom          method_inliner_map_(method_inliner_map) {
326449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom      CHECK(verification_results != nullptr);
336449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom      CHECK(method_inliner_map != nullptr);
346449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    }
356449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
366449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    virtual ~CompilerCallbacksImpl() { }
376449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
386449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    virtual bool MethodVerified(verifier::MethodVerifier* verifier)
396449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom        SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
406449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom      bool result = verification_results_->ProcessVerifiedMethod(verifier);
416449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom      if (result) {
426449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom        MethodReference ref = verifier->GetMethodReference();
436449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom        method_inliner_map_->GetMethodInliner(ref.dex_file)
446449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom            ->AnalyseMethodCode(verifier);
456449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom      }
466449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom      return result;
476449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    }
486449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    virtual void ClassRejected(ClassReference ref) {
496449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom      verification_results_->AddRejectedClass(ref);
506449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    }
516449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
526449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom  private:
536449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    VerificationResults* verification_results_;
546449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom    DexFileToMethodInlinerMap* method_inliner_map_;
556449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom};
566449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
576449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom}  // namespace art
586449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom
596449c62e40ef3a9bb75f664f922555affb532ee4Brian Carlstrom#endif  // ART_COMPILER_DRIVER_COMPILER_CALLBACKS_IMPL_H_
60