Introduce DEFINE_TRACE macros
Introduce DEFINE_TRACE macros

This CL introduces DEFINE_TRACE macros, which can be used to define
Oilpan trace methods. By using these macros, we can easily define trace
methods that support inline marking.

Before this CL, trace methods were directly declared/defined on the class:
class Foo : public GarbageCollected {
    Member<Y> m_y;
public:
    virtual void trace(Visitor* visitor) { visitor->trace(m_y); }
};

After this CL, trace methods can be defined/defined using DEFINE_TRACE macros:
class Foo : public GarbageCollected {
    Member<Y> m_y;
public:
    DEFINE_INLINE_TRACE(virtual,) { visitor->trace(m_y); }
};

DEFINE_TRACE macros defines two overloaded versions of trace methods,
trace(Visitor*) and trace(InlinedGlobalMarkingVisitor).
The latter version makes use of InlinedGlobalMarkingVisitor to eliminate virtual method dispatch,

Old directly defined trace methods -> DEFINE_TRACE macros:

*** Foo.h
class Foo : public GarbageCollected {
public:
  // declaration
  virtual void trace(Visitor*) override; -> DECLARE_TRACE(virtual, override);

  // inline definition
  virtual void trace(Visitor* visitor)   -> DEFINE_INLINE_TRACE(virtual,)
  {
    visitor->mark(m_bar);
  }
};

*** Foo.cpp
Foo::trace(Visitor* visitor)             -> DEFINE_TRACE(Foo);
{
  visitor->mark(m_bar);
}

DECLARE_TRACE takes two arguments to support virtual and override qualifiers.
Pass the qualifier or empty to adjust method declarations:
virtual void trace(Visitor*) override -> DECLARE_TRACE(virtual, override);
void trace(Visitor*)                  -> DECLARE_TRACE(,);

BUG=420515

Review URL: https://codereview.chromium.org/804873004

git-svn-id: bf5cd6ccde378db821296732a091cfbcf5285fbd@187605 bbb929c8-8fbe-4397-9dbb-9b2b20218538

Bysmyyr/blink-crosswalk,Pluto-tv/blink-crosswalk,PeterWangIntel/blink-crosswalk,kurli/blink-crosswalk,jtg-gg/blink,XiaosongWei/blink-crosswalk,XiaosongWei/blink-crosswalk,modulexcite/blink,modulexcite/blink,nwjs/blink,Bysmyyr/blink-crosswalk,kurli/blink-crosswalk,modulexcite/blink,Pluto-tv/blink-crosswalk,modulexcite/blink,modulexcite/blink,kurli/blink-crosswalk,Bysmyyr/blink-crosswalk,smishenk/blink-crosswalk,XiaosongWei/blink-crosswalk,Pluto-tv/blink-crosswalk,nwjs/blink,Pluto-tv/blink-crosswalk,nwjs/blink,nwjs/blink,PeterWangIntel/blink-crosswalk,XiaosongWei/blink-crosswalk,smishenk/blink-crosswalk,Bysmyyr/blink-crosswalk,modulexcite/blink,kurli/blink-crosswalk,jtg-gg/blink,Bysmyyr/blink-crosswalk,XiaosongWei/blink-crosswalk,PeterWangIntel/blink-crosswalk,nwjs/blink,PeterWangIntel/blink-crosswalk,nwjs/blink,modulexcite/blink,modulexcite/blink,jtg-gg/blink,smishenk/blink-crosswalk,kurli/blink-crosswalk,XiaosongWei/blink-crosswalk,kurli/blink-crosswalk,Bysmyyr/blink-crosswalk,PeterWangIntel/blink-crosswalk,PeterWangIntel/blink-crosswalk,Pluto-tv/blink-crosswalk,XiaosongWei/blink-crosswalk,kurli/blink-crosswalk,PeterWangIntel/blink-crosswalk,Pluto-tv/blink-crosswalk,nwjs/blink,kurli/blink-crosswalk,modulexcite/blink,PeterWangIntel/blink-crosswalk,XiaosongWei/blink-crosswalk,Pluto-tv/blink-crosswalk,kurli/blink-crosswalk,nwjs/blink,jtg-gg/blink,smishenk/blink-crosswalk,smishenk/blink-crosswalk,Pluto-tv/blink-crosswalk,jtg-gg/blink,smishenk/blink-crosswalk,modulexcite/blink,smishenk/blink-crosswalk,jtg-gg/blink,kurli/blink-crosswalk,PeterWangIntel/blink-crosswalk,XiaosongWei/blink-crosswalk,Pluto-tv/blink-crosswalk,nwjs/blink,PeterWangIntel/blink-crosswalk,jtg-gg/blink,smishenk/blink-crosswalk,Bysmyyr/blink-crosswalk,Bysmyyr/blink-crosswalk,jtg-gg/blink,jtg-gg/blink,jtg-gg/blink,Bysmyyr/blink-crosswalk,smishenk/blink-crosswalk,XiaosongWei/blink-crosswalk,Pluto-tv/blink-crosswalk,smishenk/blink-crosswalk,nwjs/blink,Bysmyyr/blink-crosswalk